! / 1560953088 0 0 0 75458 ` ***********************************((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((FFFFVhVhVhVhVhVhVhVh))))))))))))))))))))))))))))))))))% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % ŴŴŴŴŴŴŴŴŴŴŴŴŴŴ-----777777777777777^^^^^^^^^^^^^^^^^)))))))))))))))))))))))))) 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 o o o o o o o o o o o o o < < < < < < < < < < < < < / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / l l l l l l l l l l l l l l l l l l l l l l l l l l l                                   w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w|||||||||||||||||||||||||||HHHHHHHHHHHHHHHHHI\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\I\HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrTrT,,,,,,,,,,,,!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"""""""""""""""""""""""""""""""""""""""""#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$#R$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%`p%`p%`p%`p%`p%`p%`p%`p%`p%x%x%x%x%x%x%x%x%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%t%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,%,-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-Z-t-t-t-t/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh/qh00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002]2]2]2]2]__x86.get_pc_thunk.bx_Z22GetExternalMethodCountv__x86.get_pc_thunk.cx_Z13tryCustomLockicustomLocks_Z10customLocki_Z12customUnlocki_Z10threadLockithreadLocks_Z12threadUnlocki_Z18IsThreadQueueEmptyi_Z15pullThreadQueuei_Z15pushThreadQueueiPc_Z6cpystrPKci_Z14getThreadCountv_Z14setThreadCounti_Z19increaseThreadCountv_Z17reduceThreadCountv_Z24checkIncreaseThreadCounti_Z22getIncreaseThreadCountv_Z13jx_init_locksv_Z16jx_destroy_locksv_ZNSt11_Deque_baseIPcSaIS0_EE17_M_initialize_mapEj_ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E_ZNSt3mapIiPFN2v86HandleINS0_5ValueEEERKNS0_9ArgumentsEESt4lessIiESaISt4pairIKiS8_EEED2Ev_ZNSt3mapIiPFN2v86HandleINS0_5ValueEEERKNS0_9ArgumentsEESt4lessIiESaISt4pairIKiS8_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E_Z20ClearExternalMethodsv_ZNSt3mapIiPcSt4lessIiESaISt4pairIKiS0_EEED2Ev_ZNSt3mapIiPcSt4lessIiESaISt4pairIKiS0_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE24_M_get_insert_unique_posERS1__Z23GetExternalMethodTargeti_ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE24_M_get_insert_unique_posERS1__Z17AddExternalMethodPKcPFN2v86HandleINS1_5ValueEEERKNS1_9ArgumentsEE_Z21GetExternalMethodNamei_ZN4node7commons25threadIdFromThreadPrivateEv__x86.get_pc_thunk.bx_ZN4node7commons13getThreadLoopEv_ZN4node7commons9stringOPSEb_ZN4node7commons7DisposeEv_ZN4node7commons10setProcessEN2v86HandleINS1_6ObjectEEE_ZN4node7commonsD2Ev_ZN4node7commonsD1Ev_ZN4node13removeCommonsEv_ZN4node7commonsC2Ei_ZN4node7commons12TriggerDummyEP10uv_async_si_ZN4node7commonsC1Ei_ZN4node7commons10PingThreadEv_ZN4node7commons18getCurrentThreadIdEv_ZN4node7commons11getInstanceEv_ZN4node7commons21getInstanceByThreadIdEi__x86.get_pc_thunk.cx_ZN4node7commons11CleanPingerEi_ZN4node7commons14getInstanceIsoEPN2v87IsolateE_ZN4node7commons17SetPortBoundariesEiib_ZN4node7commons4bTCPE_ZN4node7commons5bTCPSE_ZN4node7commons14GetTCPBoundaryEv_ZN4node7commons15GetTCPSBoundaryEv_ZN4node7commons12SetMaxMemoryEx_ZN4node7commons9maxMemoryE_ZN4node7commons10SetSysExecEi_ZN4node7commons12allowSysExecE_ZN4node7commons26SetAllowLocalNativeModulesEi_ZN4node7commons23allowLocalNativeModulesE_ZN4node7commons23AllowLocalNativeModulesEv_ZN4node7commons16SetMonitoringAPIEb_ZN4node7commons18allowMonitoringAPIE_ZN4node7commons18AllowMonitoringAPIEv_ZN4node7commons9SetMaxCPUEii_ZN4node7commons6maxCPUE_ZN4node7commons14maxCPUIntervalE_ZN4node7commons9GetMaxCPUEv_ZN4node7commons17GetMaxCPUIntervalEv_ZN4node7commons19SetGlobalModulePathESs_ZN4node7commons16globalModulePathE_ZN4node7commons19GetGlobalModulePathEv_ZN4node7commons10CanSysExecEv_ZN4node7commons16CheckMemoryLimitEv_ZN4node6GetCPUExPd_ZN4node7commons11GetCPUUsageExx_ZN4node7commons13CheckCPUUsageEx_ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZNSt3mapIliSt4lessIlESaISt4pairIKliEEED2Ev_ZNSt3mapIliSt4lessIlESaISt4pairIKliEEED1Ev_ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1__ZN4node12InitThreadIdEib_ZN4node17CreateNewThreadIdEv_ZN4node7commons15threadIdCounterE_ZN4node7commons20getAvailableThreadIdEb_ZN4node7commons24embedded_multithreading_E_ZN4node10setCommonsEPNS_7commonsE_ZN4node7commons14setMainIsolateEv_ZN4node7commons11newInstanceEi_ZN4node7commons20self_hosted_process_E_ZN4node7commons10riThreadIdE_ZN4node7commons7mapDataE_ZN4node7commons15threadPoolCountE_ZN4node7commons8mapCountE_ZN4node7commons15max_header_sizeE_ZN4node7commons15process_status_E_ZN4node7commons16embedded_source_E_ZN4node7commons16ssl_initialized_E_ZN4node7commons18processExitInvokedE_ZN4node7commons17processExitResultE_ZN6jxcore11SendMessageEiPKcib__x86.get_pc_thunk.bx_ZN6jxcore12CreateThreadEPFvPvES0__ZN6jxcore15CreateInstancesEi__x86.get_pc_thunk.bx_ZN6jxcore10JXInstance8CallBackERKN2v89ArgumentsE_ZN6jxcore10JXInstance14refWaitCounterERKN2v89ArgumentsE_ZN6jxcore10JXInstance15setThreadOnHoldERKN2v89ArgumentsE_ZN4node9SetMethodIN2v85LocalINS1_6ObjectEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE_ZN6jxcore10JXInstance9runScriptEPv_ZN6jxcore10JXInstance8CompilerERKN2v89ArgumentsE_ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj__x86.get_pc_thunk.bx_ZN6jxcore10jobs_queueE_ZN6jxcore11getJobCountEv__x86.get_pc_thunk.cx_ZN6jxcore16increaseJobCountEv_ZN6jxcore16decreaseJobCountEv_ZN6jxcore9addNewJobEiPNS_3JobE_ZN6jxcore6getJobEi_ZN6jxcore3Job12removeTaskerEi_ZN6jxcore14threadTaskListE_ZN6jxcore3Job7DisposeEv_ZSt4copyIiESt15_Deque_iteratorIT_RS1_PS1_ES0_IS1_RKS1_PS5_ES8_S4__ZNSt11_Deque_baseIPN6jxcore3JobESaIS2_EE17_M_initialize_mapEj_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E_ZNSt3mapIiPN6jxcore3JobESt4lessIiESaISt4pairIKiS2_EEED2Ev_ZNSt3mapIiPN6jxcore3JobESt4lessIiESaISt4pairIKiS2_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E_ZN6jxcore3Job13removeTaskersEv_ZN6jxcore15taskDefinitionsE_ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEED2Ev_ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEED1Ev_ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1__ZN6jxcore17getTaskDefinitionEi_ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE24_M_get_insert_unique_posERS1__ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEEixERS8__ZNSt5dequeIiSaIiEE17_M_reallocate_mapEjb_ZNSt5dequeIiSaIiEE16_M_push_back_auxERKi_ZN6jxcore3JobC2EPKciS2_iiib_ZN6jxcore3JobC1EPKciS2_iiib_ZN6jxcore3Job8getTasksEPSt5queueIiSt5dequeIiSaIiEEEi_ZN6jxcore3Job9fillTasksEi_ZNSt5dequeIiSaIiEE13_M_insert_auxISt15_Deque_iteratorIiRKiPS4_EEEvS3_IiRiPiET_SB_j_ZNSt5dequeIiSaIiEEaSERKS1__ZN6jxcore3Job14getNewThreadIdEv_ZN6XSpace9StoreInitEv__x86.get_pc_thunk.cx_ZN6XSpace9INITSTOREEv__x86.get_pc_thunk.bx_ZN6XSpace9LOCKSTOREEv_ZN6XSpace11UNLOCKSTOREEv_ZN6XSpace10LOCKTIMERSEv_ZN6XSpace12UNLOCKTIMERSEv_ZN6XSpace12DESTROYSTOREEv_ZN6XSpace5StoreEv_ZN6XSpace6TimersEv_ZN6XSpace9SetHasKeyEb_ZN6XSpace9GetHasKeyEv_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE14internal_clearEPNS_10btree_nodeIS9_EE_ZN6XSpace10ClearStoreEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT__ZNK5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEEET_RS6_SI__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6__ZN6XSpace16ExpirationRemoveEPKc_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T__ZN6XSpace14ExpirationKickEPKc__x86.get_pc_thunk.bxmz_adler32mz_crc32mz_freemz_version__x86.get_pc_thunk.cxmz_deflateEndmz_deflateBoundmz_compressBoundmz_inflateInit2mz_inflateInitmz_inflateEndmz_errortinfl_decompressmz_inflatemz_uncompresstinfl_decompress_mem_to_heaptinfl_decompress_mem_to_memtinfl_decompress_mem_to_callbacktdefl_compresstdefl_compress_buffertdefl_initmz_deflateResettdefl_get_prev_return_statustdefl_get_adler32mz_deflatetdefl_compress_mem_to_outputtdefl_compress_mem_to_heaptdefl_compress_mem_to_memtdefl_create_comp_flags_from_zip_paramsmz_deflateInit2mz_deflateInitmz_compress2mz_compresstdefl_write_image_to_png_file_in_memory_extdefl_write_image_to_png_file_in_memorymz_zip_reader_get_num_filesmz_zip_reader_is_file_encryptedmz_zip_reader_is_file_a_directorymz_zip_reader_file_statmz_zip_reader_get_filenamemz_zip_reader_locate_filemz_zip_reader_extract_to_mem_no_allocmz_zip_reader_extract_file_to_mem_no_allocmz_zip_reader_extract_to_memmz_zip_reader_extract_file_to_memmz_zip_reader_extract_to_heapmz_zip_reader_extract_file_to_heapmz_zip_reader_extract_to_callbackmz_zip_reader_extract_file_to_callbackmz_zip_reader_extract_to_filemz_zip_reader_endmz_zip_reader_initmz_zip_reader_init_memmz_zip_reader_init_filemz_zip_reader_extract_file_to_filemz_zip_writer_initmz_zip_writer_init_from_readermz_zip_writer_add_mem_exmz_zip_writer_add_memmz_zip_writer_add_filemz_zip_writer_add_from_zip_readermz_zip_writer_finalize_archivemz_zip_writer_finalize_heap_archivemz_zip_writer_endmz_zip_writer_init_heapmz_zip_writer_init_filemz_zip_add_mem_to_archive_file_in_placemz_zip_extract_archive_file_to_heap_ZN6jxcore14CompressStringEPN4node7commonsEPKcl_ZN6jxcore14CompressStringEPN4node7commonsEPN2v86HandleINS3_5ValueEEE_ZN6jxcore10RaiseCacheEm_ZN6jxcore11RemoveCacheEv_ZN6jxcore16UncompressStringEPN4node7commonsEN2v86HandleINS3_6ObjectEEEm_ZN6jxcore16UncompressNativeEPN4node7commonsEPKcm_ZN4node14ErrnoExceptionEiPKcS1_S1___x86.get_pc_thunk.bx_ZN4node19get_uv_errno_stringEi_ZN4node20get_uv_errno_messageEi_ZN4node11UVExceptionEiPKcS1_S1__ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s_ZN4node8SetErrnoE8uv_err_s_ZN4node9maybeExitEPNS_7commonsEi_ZN4node12OnFatalErrorEPKcS1__ZN4node20DisplayExceptionLineERN2v88TryCatchE_ZN4node15ReportExceptionERN2v88TryCatchEb_ZN4node14FatalExceptionERN2v88TryCatchE_ZN4node12signo_stringEi__x86.get_pc_thunk.cx_ZN6jxcore8JXThread6CreateEPFvPvES1___x86.get_pc_thunk.bx_ZN6jxcore8JXThread4JoinES0__ZN6jxcore8JXThread10GetCurrentEv_ZN6jxcore8JXThread6EqualsES0__ZN4node10HandleWrap9SetHandleEP11uv_handle_s_ZN4node10HandleWrapD2Ev__x86.get_pc_thunk.bx_ZTVN4node10HandleWrapE_ZN4node10HandleWrapD1Ev_ZN4node10HandleWrapD0Ev_ZN4node10HandleWrap7OnCloseEP11uv_handle_s_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrap5unrefEv_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN4node10HandleWrap3refEv_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_s_ZN4node10HandleWrapC1EN2v86HandleINS1_6ObjectEEEP11uv_handle_s_ZN4node10ThreadWrap4FreeERKN2v89ArgumentsE__x86.get_pc_thunk.bx_ZN4node10ThreadWrap8CpuCountERKN2v89ArgumentsE_ZN4node10ThreadWrap10SetExitingERKN2v89ArgumentsE_ZN4node10ThreadWrap11GetCPUCountERKN2v89ArgumentsE_ZN4node10ThreadWrap11ResetThreadERKN2v89ArgumentsE_ZN4node10ThreadWrap11ThreadCountERKN2v89ArgumentsE_ZN4node10ThreadWrap9JobsCountERKN2v89ArgumentsE_ZN4node10ThreadWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10ThreadWrap7AddTaskERKN2v89ArgumentsE_ZN4node10ThreadWrap13SendToThreadsERKN2v89ArgumentsE_ZN4node10ThreadWrap10GetResultsERKN2v89ArgumentsE_ZN4node10ThreadWrap11SetCPUCountERKN2v89ArgumentsE_ZN4node10ThreadWrap4KillERKN2v89ArgumentsE_ZN4node10ThreadWrap14collectResultsEPNS_7commonsEib_ZN4node10ThreadWrap13EmitOnMessageEinode_thread_wrap_module_ZN4node10MemoryWrap18ReadEmbeddedSourceERKN2v89ArgumentsE__x86.get_pc_thunk.bx_ZN4node10MemoryWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10MemoryWrap14SetCPUCountMapERKN2v89ArgumentsE_ZN4node10MemoryWrap6MapSetERKN2v89ArgumentsE_ZN4node10MemoryWrap6MapGetERKN2v89ArgumentsE_ZN4node10MemoryWrap7MapReadERKN2v89ArgumentsE_ZN4node10MemoryWrap8MapExistERKN2v89ArgumentsE_ZN4node10MemoryWrap9MapRemoveERKN2v89ArgumentsE_ZN4node10MemoryWrap9SourceSetERKN2v89ArgumentsE_ZN4node10MemoryWrap20SourceSetIfNotExistsERKN2v89ArgumentsE_ZN4node10MemoryWrap13SourceSetIfEqERKN2v89ArgumentsE_ZN4node10MemoryWrap19SourceSetIfEqOrNullERKN2v89ArgumentsE_ZN4node10MemoryWrap10SourceReadERKN2v89ArgumentsE_ZN4node10MemoryWrap12SourceRemoveERKN2v89ArgumentsE_ZN4node10MemoryWrap9SourceGetERKN2v89ArgumentsE_ZN4node10MemoryWrap11SourceExistERKN2v89ArgumentsE_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE_ZN4node10MemoryWrap8MapClearEb_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEv_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT__ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12erase_uniqueERS7__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T__ZN4node10MemoryWrap9SharedSetEPKcS2_jnode_memory_wrap_module_ZN4node12JXTimersWrap12StartWatcherERKN2v89ArgumentsE__x86.get_pc_thunk.bx_ZN4node12JXTimersWrap7WatcherEPv_ZN4node12JXTimersWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node12JXTimersWrap14ForceCheckKeysERKN2v89ArgumentsE_ZNSt11_Deque_baseISsSaISsEE17_M_initialize_mapEj_ZNSt5dequeISsSaISsEE16_M_push_back_auxERKSs_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT__ZN4node12JXTimersWrap9checkKeysEvnode_jxtimers_wrap_module_ZN4node9TimerWrapD2Ev__x86.get_pc_thunk.bx_ZTVN4node9TimerWrapE_ZN4node9TimerWrapD1Ev_ZN4node9TimerWrapD0Ev_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si_ZN4node9TimerWrap3NowERKN2v89ArgumentsE_ZN4node9TimerWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node9TimerWrap3NewERKN2v89ArgumentsE_ZN4node9TimerWrap5StartERKN2v89ArgumentsE_ZN4node9TimerWrap4StopERKN2v89ArgumentsE_ZN4node9TimerWrap9SetRepeatERKN2v89ArgumentsE_ZN4node9TimerWrap9GetRepeatERKN2v89ArgumentsE_ZN4node9TimerWrap5AgainERKN2v89ArgumentsE_ZN4node9TimerWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node9TimerWrapC1EN2v86HandleINS1_6ObjectEEEnode_timer_wrap_module_ZN4node2OS13GetEndiannessERKN2v89ArgumentsE__x86.get_pc_thunk.bx_ZN4node2OS11GetHostnameERKN2v89ArgumentsE_ZN4node2OS9GetOSTypeERKN2v89ArgumentsE_ZN4node2OS12GetOSReleaseERKN2v89ArgumentsE_ZN4node2OS10GetCPUInfoERKN2v89ArgumentsE_ZN4node2OS13GetFreeMemoryERKN2v89ArgumentsE_ZN4node2OS14GetTotalMemoryERKN2v89ArgumentsE_ZN4node2OS9GetUptimeERKN2v89ArgumentsE_ZN4node2OS10GetLoadAvgERKN2v89ArgumentsE_ZN4node2OS21GetInterfaceAddressesERKN2v89ArgumentsE_ZN4node2OS10InitializeEN2v86HandleINS1_6ObjectEEEnode_os_module_ZN4node10cares_wrap9QueryWrap4SendEPKc_ZN4node10cares_wrap9QueryWrap4SendEPKci_ZN4node10cares_wrap9QueryWrap5ParseEPhi_ZN4node10cares_wrap9QueryWrap5ParseEP7hostent__x86.get_pc_thunk.bx_ZN4node10cares_wrap17GetHostByNameWrap4SendEPKci_ZN4node10cares_wrap9QueryWrap8CallbackEPviiP7hostent_ZN4node10cares_wrap9QueryWrapD2Ev_ZTVN4node10cares_wrap9QueryWrapE_ZN4node10cares_wrap9QueryWrapD1Ev_ZN4node10cares_wrap17GetHostByAddrWrap4SendEPKc_ZN4node10cares_wrap14QueryNaptrWrap5ParseEPhi_ZN4node10cares_wrap14QueryNaptrWrap4SendEPKc_ZN4node10cares_wrap9QueryWrap8CallbackEPviiPhi_ZN4node10cares_wrap12QuerySrvWrap4SendEPKc_ZN4node10cares_wrap12QueryTxtWrap4SendEPKc_ZN4node10cares_wrap11QueryNsWrap4SendEPKc_ZN4node10cares_wrap11QueryMxWrap4SendEPKc_ZN4node10cares_wrap14QueryCnameWrap4SendEPKc_ZN4node10cares_wrap13QueryAaaaWrap4SendEPKc_ZN4node10cares_wrap10QueryAWrap4SendEPKc_ZN4node10cares_wrap17GetHostByNameWrap5ParseEP7hostent_ZN4node10cares_wrap16AfterGetAddrInfoEP16uv_getaddrinfo_siP8addrinfo_ZN4node10cares_wrap17GetHostByNameWrapD2Ev_ZN4node10cares_wrap17GetHostByNameWrapD1Ev_ZN4node10cares_wrap13QueryAaaaWrapD2Ev_ZN4node10cares_wrap13QueryAaaaWrapD1Ev_ZN4node10cares_wrap14QueryCnameWrapD2Ev_ZN4node10cares_wrap14QueryCnameWrapD1Ev_ZN4node10cares_wrap12QueryTxtWrapD2Ev_ZN4node10cares_wrap12QueryTxtWrapD1Ev_ZN4node10cares_wrap11QueryNsWrapD2Ev_ZN4node10cares_wrap11QueryNsWrapD1Ev_ZN4node10cares_wrap17GetHostByAddrWrapD2Ev_ZN4node10cares_wrap17GetHostByAddrWrapD1Ev_ZN4node10cares_wrap14QueryNaptrWrapD2Ev_ZN4node10cares_wrap14QueryNaptrWrapD1Ev_ZN4node10cares_wrap12QuerySrvWrapD2Ev_ZN4node10cares_wrap12QuerySrvWrapD1Ev_ZN4node10cares_wrap11QueryMxWrapD2Ev_ZN4node10cares_wrap11QueryMxWrapD1Ev_ZN4node10cares_wrap10QueryAWrapD2Ev_ZN4node10cares_wrap10QueryAWrapD1Ev_ZN4node10cares_wrap9QueryWrapD0Ev_ZN4node10cares_wrap12QueryTxtWrapD0Ev_ZN4node10cares_wrap17GetHostByAddrWrapD0Ev_ZN4node10cares_wrap17GetHostByNameWrapD0Ev_ZN4node10cares_wrap13QueryAaaaWrapD0Ev_ZN4node10cares_wrap14QueryNaptrWrapD0Ev_ZN4node10cares_wrap11QueryNsWrapD0Ev_ZN4node10cares_wrap10QueryAWrapD0Ev_ZN4node10cares_wrap12QuerySrvWrapD0Ev_ZN4node10cares_wrap14QueryCnameWrapD0Ev_ZN4node10cares_wrap11QueryMxWrapD0Ev_ZN4node10cares_wrap17GetHostByAddrWrap5ParseEP7hostent_ZTVN4node10cares_wrap12QuerySrvWrapE_ZTVN4node10cares_wrap10QueryAWrapE_ZTVN4node10cares_wrap12QueryTxtWrapE_ZTVN4node10cares_wrap14QueryNaptrWrapE_ZTVN4node10cares_wrap17GetHostByAddrWrapE_ZTVN4node10cares_wrap11QueryNsWrapE_ZTVN4node10cares_wrap14QueryCnameWrapE_ZTVN4node10cares_wrap11QueryMxWrapE_ZTVN4node10cares_wrap13QueryAaaaWrapE_ZTVN4node10cares_wrap17GetHostByNameWrapE_ZN4node10cares_wrap11QueryNsWrap5ParseEPhi_ZN4node10cares_wrap10QueryAWrap5ParseEPhi_ZN4node10cares_wrap13QueryAaaaWrap5ParseEPhi_ZN4node10cares_wrap14QueryCnameWrap5ParseEPhi_ZN4node10cares_wrap12QueryTxtWrap5ParseEPhi_ZN4node10cares_wrap11QueryMxWrap5ParseEPhi_ZN4node10cares_wrap12QuerySrvWrap5ParseEPhinode_cares_wrap_module_ZN4node11FSEventWrapD2Ev__x86.get_pc_thunk.bx_ZTVN4node11FSEventWrapE_ZN4node11FSEventWrapD1Ev_ZN4node11FSEventWrapD0Ev_ZN4node11FSEventWrap7OnEventEP13uv_fs_event_sPKcii_ZN4node11FSEventWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node11FSEventWrap3NewERKN2v89ArgumentsE_ZN4node11FSEventWrap5StartERKN2v89ArgumentsE_ZN4node11FSEventWrap5CloseERKN2v89ArgumentsE_ZN4node11FSEventWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node11FSEventWrapC1EN2v86HandleINS1_6ObjectEEEnode_fs_event_wrap_module_ZN2v818RetainedObjectInfo13GetGroupLabelEv_ZN2v818RetainedObjectInfo15GetElementCountEv_ZN2v818RetainedObjectInfo14GetSizeInBytesEv_ZN4node18RetainedBufferInfo7DisposeEv_ZN4node18RetainedBufferInfo12IsEquivalentEPN2v818RetainedObjectInfoE__x86.get_pc_thunk.bx_ZN4node18RetainedBufferInfo5labelE_ZN4node18RetainedBufferInfo7GetHashEv_ZN4node18RetainedBufferInfo8GetLabelEv__x86.get_pc_thunk.cx_ZN4node18RetainedBufferInfoD2Ev_ZN4node18RetainedBufferInfoD1Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv_ZN4node10ObjectWrap3RefEv_ZN4node18RetainedBufferInfoD0Ev_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN4node18RetainedBufferInfo14GetSizeInBytesEv_ZN4node6Buffer10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node6Buffer3NewERKN2v89ArgumentsE_ZN4node6Buffer11BinarySliceERKN2v89ArgumentsE_ZN4node6Buffer10AsciiSliceERKN2v89ArgumentsE_ZN4node6Buffer11Base64SliceERKN2v89ArgumentsE_ZN4node6Buffer9Ucs2SliceERKN2v89ArgumentsE_ZN4node6Buffer8HexSliceERKN2v89ArgumentsE_ZN4node6Buffer9Utf8SliceERKN2v89ArgumentsE_ZN4node6Buffer9Utf8WriteERKN2v89ArgumentsE_ZN4node6Buffer10AsciiWriteERKN2v89ArgumentsE_ZN4node6Buffer11BinaryWriteERKN2v89ArgumentsE_ZN4node6Buffer11Base64WriteERKN2v89ArgumentsE_ZN4node6Buffer9Ucs2WriteERKN2v89ArgumentsE_ZN4node6Buffer8HexWriteERKN2v89ArgumentsE_ZN4node6Buffer11ReadFloatLEERKN2v89ArgumentsE_ZN4node6Buffer11ReadFloatBEERKN2v89ArgumentsE_ZN4node6Buffer12ReadDoubleLEERKN2v89ArgumentsE_ZN4node6Buffer12ReadDoubleBEERKN2v89ArgumentsE_ZN4node6Buffer12WriteFloatLEERKN2v89ArgumentsE_ZN4node6Buffer12WriteFloatBEERKN2v89ArgumentsE_ZN4node6Buffer13WriteDoubleLEERKN2v89ArgumentsE_ZN4node6Buffer13WriteDoubleBEERKN2v89ArgumentsE_ZN4node6Buffer4FillERKN2v89ArgumentsE_ZN4node6Buffer4CopyERKN2v89ArgumentsE_ZN4node6Buffer7CompareERKN2v89ArgumentsE_ZN4node6Buffer13IndexOfStringERKN2v89ArgumentsE_ZN4node6Buffer13IndexOfNumberERKN2v89ArgumentsE_ZN4node6Buffer13IndexOfBufferERKN2v89ArgumentsE_ZN4node6Buffer10ByteLengthERKN2v89ArgumentsE_ZN4node6Buffer10Utf8LengthERKN2v89ArgumentsE_ZN4node6Buffer14MakeFastBufferERKN2v89ArgumentsE_ZN4node6Buffer24SetFastBufferConstructorERKN2v89ArgumentsE_ZN4node11WrapperInfoEtN2v86HandleINS0_5ValueEEE_ZN4node10ObjectWrap5UnrefEv_ZN4node10ObjectWrapD0Ev_ZN4node6Buffer3NewEN2v86HandleINS1_6StringEEE_ZN4node6Buffer3NewEjPNS_7commonsE_ZN4node6Buffer7ReplaceEPcjPFvS1_PvES2__ZN4node6BufferC2EPNS_7commonsEN2v86HandleINS3_6ObjectEEEj_ZTVN4node6BufferE_ZN4node6BufferC1EPNS_7commonsEN2v86HandleINS3_6ObjectEEEj_ZN4node6BufferD2Ev_ZN4node6BufferD1Ev_ZN4node6BufferD0Ev_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZN4node6Buffer3NewEPcjPFvS1_PvES2_PNS_7commonsE_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN4node6Buffer11HasInstanceEN2v86HandleINS1_5ValueEEE_ZN4node18RetainedBufferInfoC2EPNS_6BufferE_ZTVN4node18RetainedBufferInfoE_ZN4node18RetainedBufferInfoC1EPNS_6BufferE_ZN4node7IndexOfEPKcjS1_j_ZTVN2v818RetainedObjectInfoEnode_buffer_module_ZN4node7TCPWrapD2Ev__x86.get_pc_thunk.bx_ZN4node7TCPWrapD1Ev_ZN4node7TCPWrapD0Ev_ZN4node7TCPWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node7TCPWrap3NewERKN2v89ArgumentsE_ZN4node7TCPWrap4OpenERKN2v89ArgumentsE_ZN4node7TCPWrap4BindERKN2v89ArgumentsE_ZN4node7TCPWrap6ListenERKN2v89ArgumentsE_ZN4node7TCPWrap7ConnectERKN2v89ArgumentsE_ZN4node7TCPWrap5Bind6ERKN2v89ArgumentsE_ZN4node7TCPWrap8Connect6ERKN2v89ArgumentsE_ZN4node7TCPWrap11GetSockNameERKN2v89ArgumentsE_ZN4node7TCPWrap11GetPeerNameERKN2v89ArgumentsE_ZN4node7TCPWrap10SetNoDelayERKN2v89ArgumentsE_ZN4node7TCPWrap12SetKeepAliveERKN2v89ArgumentsE_ZN4node7TCPWrap12AfterConnectEP12uv_connect_si_ZN4node7TCPWrap12OnConnectionEP11uv_stream_si_ZN4node7TCPWrap14InstantiateCOMEPNS_7commonsE_ZN4node7TCPWrap11InstantiateEv_ZN4node7TCPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7TCPWrap8UVHandleEv_ZN4node7TCPWrapC2EN2v86HandleINS1_6ObjectEEE_ZTVN4node7TCPWrapE_ZN4node7TCPWrapC1EN2v86HandleINS1_6ObjectEEE_ZN4node11AddressToJSEPN2v87IsolateEPK8sockaddrnode_tcp_wrap_module_ZN4node7UDPWrap19DeleteSlabAllocatorEPv__x86.get_pc_thunk.bx_ZN4node7UDPWrapD2Ev_ZTVN4node7UDPWrapE_ZN4node7UDPWrapD1Ev_ZN4node7UDPWrapD0Ev_ZN4node7UDPWrap7OnAllocEP11uv_handle_sj_ZN4node7UDPWrap6OnRecvEP8uv_udp_si8uv_buf_tP8sockaddrj_ZN4node7UDPWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node7UDPWrap3NewERKN2v89ArgumentsE_ZN4node7UDPWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN4node7UDPWrap4BindERKN2v89ArgumentsE_ZN4node7UDPWrap4SendERKN2v89ArgumentsE_ZN4node7UDPWrap5Bind6ERKN2v89ArgumentsE_ZN4node7UDPWrap5Send6ERKN2v89ArgumentsE_ZN4node7UDPWrap9RecvStartERKN2v89ArgumentsE_ZN4node7UDPWrap8RecvStopERKN2v89ArgumentsE_ZN4node7UDPWrap11GetSockNameERKN2v89ArgumentsE_ZN4node7UDPWrap13AddMembershipERKN2v89ArgumentsE_ZN4node7UDPWrap14DropMembershipERKN2v89ArgumentsE_ZN4node7UDPWrap15SetMulticastTTLERKN2v89ArgumentsE_ZN4node7UDPWrap20SetMulticastLoopbackERKN2v89ArgumentsE_ZN4node7UDPWrap12SetBroadcastERKN2v89ArgumentsE_ZN4node7UDPWrap6SetTTLERKN2v89ArgumentsE_ZN4node7UDPWrap6OnSendEP13uv_udp_send_si_ZN4node7UDPWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node7UDPWrapC1EN2v86HandleINS1_6ObjectEEE_ZN4node7UDPWrap6DoBindERN6jxcore10PArgumentsEi_ZN4node7UDPWrap13SetMembershipERN6jxcore10PArgumentsE13uv_membership_ZN4node7UDPWrap6DoSendERN6jxcore10PArgumentsEi_ZN4node7UDPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7UDPWrap11InstantiateEv_ZN4node7UDPWrap8UVHandleEvnode_udp_wrap_module_ZN4node11JXUtilsWrap13GetUniqueNextERKN2v89ArgumentsE__x86.get_pc_thunk.bx_ZN4node11JXUtilsWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node11JXUtilsWrap6GetCPUERKN2v89ArgumentsE_ZN4node11JXUtilsWrap7RunLoopERKN2v89ArgumentsE_ZN4node11JXUtilsWrap8ExecSyncERKN2v89ArgumentsE_ZN4node11JXUtilsWrap10ExecSystemERKN2v89ArgumentsE_ZN4node11JXUtilsWrap8PrintLogERKN2v89ArgumentsE_ZN4node11JXUtilsWrap10PrintErrorERKN2v89ArgumentsE_ZN4node11JXUtilsWrap22BeforeApplicationStartERKN2v89ArgumentsE_ZN4node11JXUtilsWrap18SetMaxHeaderLengthERKN2v89ArgumentsE_ZN4node11JXUtilsWrap8CompressERKN2v89ArgumentsE_ZN4node11JXUtilsWrap10UncompressERKN2v89ArgumentsE_ZN4node11JXUtilsWrap19SetSourceExpirationERKN2v89ArgumentsE_ZN4node11JXUtilsWrap4execEPKcPiRSs_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T_node_jxutils_wrap_module_ZN4node11ProcessWrap3NewERKN2v89ArgumentsE__x86.get_pc_thunk.bx_ZTVN4node11ProcessWrapE_ZN4node11ProcessWrapD2Ev_ZN4node11ProcessWrapD1Ev_ZN4node11ProcessWrapD0Ev_ZN4node11ProcessWrap6OnExitEP12uv_process_sii_ZN4node11ProcessWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node11ProcessWrap5SpawnERKN2v89ArgumentsE_ZN4node11ProcessWrap4KillERKN2v89ArgumentsE_ZN4node11ProcessWrap17ParseStdioOptionsEPNS_7commonsEN2v85LocalINS3_6ObjectEEEP20uv_process_options_snode_process_wrap_module_ZN4node10SignalWrapD2Ev__x86.get_pc_thunk.bx_ZTVN4node10SignalWrapE_ZN4node10SignalWrapD1Ev_ZN4node10SignalWrapD0Ev_ZN4node10SignalWrap8OnSignalEP11uv_signal_si_ZN4node10SignalWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10SignalWrap3NewERKN2v89ArgumentsE_ZN4node10SignalWrap5StartERKN2v89ArgumentsE_ZN4node10SignalWrap4StopERKN2v89ArgumentsE_ZN4node10SignalWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node10SignalWrapC1EN2v86HandleINS1_6ObjectEEEnode_signal_wrap_module_ZN4node4File10InitializeEN2v86HandleINS1_6ObjectEEE__x86.get_pc_thunk.bx_ZN4node4File5CloseERKN2v89ArgumentsE_ZN4node4File4OpenERKN2v89ArgumentsE_ZN4node4File4ReadERKN2v89ArgumentsE_ZN4node4File9FdatasyncERKN2v89ArgumentsE_ZN4node4File5FsyncERKN2v89ArgumentsE_ZN4node4File6RenameERKN2v89ArgumentsE_ZN4node4File9FTruncateERKN2v89ArgumentsE_ZN4node4File5RMDirERKN2v89ArgumentsE_ZN4node4File5MKDirERKN2v89ArgumentsE_ZN4node4File7ReadDirERKN2v89ArgumentsE_ZN4node4File4StatERKN2v89ArgumentsE_ZN4node4File5LStatERKN2v89ArgumentsE_ZN4node4File5FStatERKN2v89ArgumentsE_ZN4node4File4LinkERKN2v89ArgumentsE_ZN4node4File7SymlinkERKN2v89ArgumentsE_ZN4node4File8ReadLinkERKN2v89ArgumentsE_ZN4node4File6UnlinkERKN2v89ArgumentsE_ZN4node4File5WriteERKN2v89ArgumentsE_ZN4node4File5ChmodERKN2v89ArgumentsE_ZN4node4File6FChmodERKN2v89ArgumentsE_ZN4node4File5ChownERKN2v89ArgumentsE_ZN4node4File6FChownERKN2v89ArgumentsE_ZN4node4File6UTimesERKN2v89ArgumentsE_ZN4node4File7FUTimesERKN2v89ArgumentsE_ZN4node16BuildStatsObjectEPNS_7commonsEPK4stat_ZN4node16BuildStatsObjectEPK4statnode_fs_module__x86.get_pc_thunk.bx_ZN4node10StreamWrap7OnAllocEP11uv_handle_sj_ZN4node10StreamWrapD2Ev_ZTVN4node10StreamWrapE_ZN4node10StreamWrapD1Ev_ZN4node10StreamWrapD0Ev_ZN4node10StreamWrap13AfterShutdownEP13uv_shutdown_si_ZN4node10StreamWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10StreamWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_stream_s_ZN4node10StreamWrapC1EN2v86HandleINS1_6ObjectEEEP11uv_stream_s_ZN4node10StreamWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN4node10StreamWrap20UpdateWriteQueueSizeEPKNS_7commonsE_ZN4node10StreamWrap10AfterWriteEP10uv_write_si_ZN4node10StreamWrap9ReadStartERKN2v89ArgumentsE_ZN4node10StreamWrap6OnReadEP11uv_stream_si8uv_buf_t_ZN4node10StreamWrap7OnRead2EP9uv_pipe_si8uv_buf_t14uv_handle_type_ZN4node10StreamWrap8ReadStopERKN2v89ArgumentsE_ZN4node10StreamWrap12OnReadCommonEP11uv_stream_si8uv_buf_t14uv_handle_type_ZN4node10StreamWrap11WriteBufferERKN2v89ArgumentsE_ZN4node10StreamWrap8ShutdownERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteStringImplILNS_8encodingE0EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE_ZN4node10StreamWrap16WriteAsciiStringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteStringImplILNS_8encodingE1EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE_ZN4node10StreamWrap15WriteUtf8StringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteStringImplILNS_8encodingE3EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE_ZN4node10StreamWrap15WriteUcs2StringERKN2v89ArgumentsE_ZN4node10StreamWrap9SetHandleEP11uv_handle_s_ZN4node7TTYWrapD2Ev__x86.get_pc_thunk.bx_ZN4node7TTYWrapD1Ev_ZN4node7TTYWrapD0Ev_ZN4node7TTYWrap13GetWindowSizeERKN2v89ArgumentsE_ZN4node7TTYWrap15GuessHandleTypeERKN2v89ArgumentsE_ZN4node7TTYWrap5IsTTYERKN2v89ArgumentsE_ZN4node7TTYWrap10SetRawModeERKN2v89ArgumentsE_ZN4node7TTYWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7TTYWrap8UVHandleEv_ZN4node7TTYWrapC2EN2v86HandleINS1_6ObjectEEEib_ZTVN4node7TTYWrapE_ZN4node7TTYWrapC1EN2v86HandleINS1_6ObjectEEEib_ZN4node7TTYWrap3NewERKN2v89ArgumentsE_ZN4node9SetMethodIN2v86HandleINS1_6ObjectEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN4node7TTYWrap10InitializeEN2v86HandleINS1_6ObjectEEEnode_tty_wrap_module_ZN4node8PipeWrapD2Ev__x86.get_pc_thunk.bx_ZN4node8PipeWrapD1Ev_ZN4node8PipeWrapD0Ev_ZN4node8PipeWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node8PipeWrap3NewERKN2v89ArgumentsE_ZN4node8PipeWrap4BindERKN2v89ArgumentsE_ZN4node8PipeWrap6ListenERKN2v89ArgumentsE_ZN4node8PipeWrap7ConnectERKN2v89ArgumentsE_ZN4node8PipeWrap4OpenERKN2v89ArgumentsE_ZN4node8PipeWrap12AfterConnectEP12uv_connect_si_ZN4node8PipeWrap12OnConnectionEP11uv_stream_si_ZN4node8PipeWrap8UVHandleEv_ZN4node8PipeWrap11InstantiateEv_ZN4node8PipeWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node8PipeWrapC2EN2v86HandleINS1_6ObjectEEEb_ZTVN4node8PipeWrapE_ZN4node8PipeWrapC1EN2v86HandleINS1_6ObjectEEEbnode_pipe_wrap_module_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN4node10ObjectWrap3RefEv_ZN4node6Parser16on_message_beginEP11http_parser_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN4node6Parser7on_bodyEP11http_parserPKcj_ZN4node10ObjectWrap5UnrefEv_ZN4node10ObjectWrapD0Ev_ZN4node6Parser6FinishERKN2v89ArgumentsE_ZN4node6Parser5PauseILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN4node6Parser5PauseILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN4node6ParserD2Ev_ZTVN4node6ParserE_ZN4node6ParserD1Ev_ZN4node6Parser7ExecuteERKN2v89ArgumentsE_ZN4node6Parser12ReinitializeERKN2v89ArgumentsE_ZN4node14NodeHttpParser3NewERKN2v89ArgumentsE_ZN4node6ParserD0Ev_ZN4node6Parser6on_urlEP11http_parserPKcj_ZN4node6Parser15on_header_valueEP11http_parserPKcj_ZNK4node9StringPtr8ToStringEb_ZN4node6Parser5FlushEv_ZN4node6Parser19on_message_completeEP11http_parser_ZN4node6Parser15on_header_fieldEP11http_parserPKcj_ZN4node6Parser20on_headers_complete_Ev_ZN4node6Parser19on_headers_completeEP11http_parser_ZN4node13ExecuteDirectEPNS_7commonsEN2v86HandleINS2_6ObjectEEEPcjjjPi_ZN4node18SetPrototypeMethodIN2v86HandleINS1_16FunctionTemplateEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN4node14NodeHttpParser17InitParserMembersEPNS_7commonsEN2v86HandleINS3_16FunctionTemplateEEE_ZN4node14NodeHttpParser10InitializeEN2v86HandleINS1_6ObjectEEEnode_http_parser_module_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN4node10ObjectWrap3RefEv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN4node4ZCtx7ProcessEP9uv_work_s_ZN4node10ObjectWrap5UnrefEv_ZN4node8NodeZlib3NewERKN2v89ArgumentsE_ZTVN4node4ZCtxE_ZN4node10ObjectWrapD0Ev_ZN4node8NodeZlib5WriteERKN2v89ArgumentsE_ZN4node4ZCtx5AfterEP9uv_work_si_ZN4node4ZCtxD2Ev_ZN4node4ZCtxD1Ev_ZN4node4ZCtxD0Ev_ZN4node8NodeZlib5CloseERKN2v89ArgumentsE_ZN4node8NodeZlib5ResetERKN2v89ArgumentsE_ZN4node8NodeZlib4InitERKN2v89ArgumentsE_ZN4node8NodeZlib22DefinePrivateConstantsEPNS_7commonsEN2v86HandleINS3_6ObjectEEE_ZN4node18SetPrototypeMethodIN2v85LocalINS1_16FunctionTemplateEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE_ZN4node8NodeZlib10InitializeEN2v86HandleINS1_6ObjectEEEnode_zlib_module_ZN4node10ModuleWrap10InitializeEN2v86HandleINS1_6ObjectEEE__x86.get_pc_thunk.bx_ZN4node10ModuleWrap12LoadInternalERKN2v89ArgumentsEnode_module_wrap_module_ZN4node15DefineConstantsEN2v86HandleINS0_6ObjectEEE__x86.get_pc_thunk.bx_ZN4node18get_builtin_moduleEPKc__x86.get_pc_thunk.bxnode_module_list_ZN4node10MainSourceEPNS_7commonsEPN6jxcore8JXStringE__x86.get_pc_thunk.bx_ZN4node16DefineJavaScriptEN2v86HandleINS0_6ObjectEEE_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB__ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT__ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T__ZN4node18JXDefineJavaScriptEv_ZN6jxcore17JXFunctionWrapper17dummyWeakCallbackEN2v810PersistentINS1_5ValueEEEPvJX_IsFunctionJX_IsErrorJX_IsInt32JX_IsDoubleJX_IsBooleanJX_IsStringJX_IsBufferJX_IsUndefinedJX_IsNullJX_IsNullOrUndefinedJX_IsObjectJX_IsJSON__x86.get_pc_thunk.bxJX_GetInt32JX_GetDoubleJX_GetBooleanJX_GetStringJX_GetDataLengthJX_GetBufferJX_FreeJX_SetInt32JX_SetDoubleJX_SetBooleanJX_SetJSONJX_SetBufferJX_SetUndefinedJX_CallFunctionJX_SetNullJX_SetObjectJX_MakePersistentJX_ClearPersistentJX_NewJX_CreateEmptyObjectJX_CreateArrayObjectJX_SetNamedPropertyJX_SetIndexedPropertyJX_GetNamedPropertyJX_GetIndexedPropertyJX_GetThreadIdByValueJX_GetGlobalObjectJX_GetProcessObjectJX_WrapObjectJX_UnwrapObject_Z9NewStringIcEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_PjJX_SetStringJX_SetError_Z9NewStringItEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_PjJX_SetUCString_Z17extensionCallbackRKN2v89ArgumentsE__x86.get_pc_thunk.bxJX_CreateRIThreadJX_JoinRIThreadJX_ProcessExitResult__x86.get_pc_thunk.cxJX_DefineExtensionJX_SetNativeMethodJX_InitializeNewEngineapp_argsJX_GetThreadIdJX_InitializeOnceargvJX_InitializeJX_EvaluateJX_DefineMainFileJX_DefineFileJX_StartEngineJX_LoopOnceJX_LoopJX_QuitLoopJX_IsV8JX_IsSpiderMonkeyJX_IsChakraJX_StopEngineJX_RemoveStoredValue_ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E_ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE24_M_get_insert_unique_posERS1_JX_GetStoredValueTypeJX_StoreValue__x86.get_pc_thunk.bx_ZN6jxcore21RegisterSignalHandlerEiPFviE_ZN6jxcore8JXEngine9ParseArgsEiPPc_ZN6jxcore8JXEngine4InitEiPPcb_ZN6jxcore8JXEngineD2Ev_ZN6jxcore19jx_engine_instancesE_ZN6jxcore8JXEngineD1Ev_ZN6jxcore8JXEngine13DefineGlobalsEv_ZN6jxcore8JXEngine9MemoryMapEPKcS2_jb_ZN6jxcore8JXEngine16InitializeEngineEiPPc_ZN6jxcore8JXEngine17JS_engine_inited_E_ZN6jxcore12DeclareProxyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPKciPFNS4_INS3_5ValueEEERKNS3_9ArgumentsEE_ZN6jxcore8JXEngine5StartEv_ZN6jxcore8JXEngine24InitializeEmbeddedEngineEiPPc_ZN6jxcore8JXEngine10InitializeEv_ZN6jxcore8JXEngine7DestroyEv_ZN6jxcore12JX_StringifyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPj_ZN6jxcore8JX_ParseEPN4node7commonsEPKcj_ZN6jxcore8JXEngine16ConvertToJXValueEPN4node7commonsEN2v86HandleINS4_5ValueEEEP8_JXValue_ZN6jxcore9Evaluate_EPKcS1_P8_JXValuePN4node7commonsE_ZN6jxcore8JXEngine8EvaluateEPKcS2_P8_JXValue_ZN6jxcore8JXEngine22InitializeProxyMethodsEPN4node7commonsE_ZN6jxcore8JXEngine4LoopEv_ZN6jxcore8JXEngine8LoopOnceEv_ZN6jxcore8JXEngine8ShutDownEv_ZN6jxcore8JXEngine20jxcore_was_shutdown_E_ZN6jxcore8JXEngine14ActiveInstanceEv_ZN6jxcore8JXEngine21GetInstanceByThreadIdEi_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E_ZNSt3mapIiPN6jxcore8JXEngineESt4lessIiESaISt4pairIKiS2_EEED2Ev_ZNSt3mapIiPN6jxcore8JXEngineESt4lessIiESaISt4pairIKiS2_EEED1Ev_ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E_ZNSt3mapISsN6jxcore8JXMethodESt4lessISsESaISt4pairIKSsS1_EEED2Ev_ZNSt3mapISsN6jxcore8JXMethodESt4lessISsESaISt4pairIKSsS1_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1__ZN6jxcore8JXEngineC2EiPPcb_ZN6jxcore8JXEngineC1EiPPcb_ZN6jxcore8JXEngineC2EPN4node7commonsE_ZN6jxcore8JXEngineC1EPN4node7commonsE_ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE24_M_get_insert_unique_posERS1__ZN6jxcore8JXEngine17DefineProxyMethodEN2v86HandleINS1_6ObjectEEEPKciPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN4node12UsingDomainsERKN2v89ArgumentsE__x86.get_pc_thunk.bx_ZN4node16GetActiveHandlesERKN2v89ArgumentsE_ZN4node11MemoryUsageERKN2v89ArgumentsE_ZN4node10EnvDeleterEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN4node27NeedImmediateCallbackGetterEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN4node18app_sandbox_folderE_ZN4node4ExitERKN2v89ArgumentsE_ZN4node12DebugProcessERKN2v89ArgumentsE_ZN4node4KillERKN2v89ArgumentsE_ZN4node6HrtimeERKN2v89ArgumentsE_ZN4node6DLOpenERKN2v89ArgumentsE_ZN4node23FromConstructorTemplateEN2v810PersistentINS0_16FunctionTemplateEEERKNS0_9ArgumentsE_ZN4node24FromConstructorTemplateXEN2v86HandleINS0_16FunctionTemplateEEERN6jxcore10PArgumentsE_ZN4node18MakeDomainCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_8FunctionEEEiPNS3_INS2_5ValueEEE_ZN4node18MakeDomainCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE_ZN4node22defineProcessCallbacksEPNS_7commonsE_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_8FunctionEEEiPNS3_INS2_5ValueEEE_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEEPKciPNS3_INS2_5ValueEEE_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEEPKciPNS1_INS0_5ValueEEE_ZN4node13ParseEncodingEPKciNS_8encodingE_ZN4node14no_deprecationE_ZN4node13ParseEncodingEN2v86HandleINS0_5ValueEEENS_8encodingE_ZN4node6EncodeEPKvjNS_8encodingE_ZN4node11DecodeBytesEN2v86HandleINS0_5ValueEEENS_8encodingE_ZN4node11DecodeWriteEPcjN2v86HandleINS1_5ValueEEENS_8encodingE_ZN4node13ExecuteStringEPN6jxcore8JXStringES2__ZN4node11EnableDebugEbPNS_7commonsE_ZN4node24EnableDebugSignalHandlerEP11uv_signal_si_ZN4node4LoadEN2v86HandleINS0_6ObjectEEE_ZN4node9RunAtExitEv_ZN4node6AtExitEPFvPvES0__ZN4node8EmitExitEN2v86HandleINS0_6ObjectEEE_ZN4node9EmitResetEN2v86HandleINS0_6ObjectEEEi_ZN4node9SetMethodIN2v86HandleINS1_6ObjectEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN4node18SetupProcessObjectEib_ZN4node16WRITE_UTF8_FLAGSE_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN4node10ObjectWrap3RefEv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN4node9InitEvalsEN2v86HandleINS0_6ObjectEEE_ZN4node14WrappedContext3NewERKN2v89ArgumentsE_ZN4node13WrappedScript3NewERKN2v89ArgumentsE_ZN4node13WrappedScript13CreateContextERKN2v89ArgumentsE_ZN4node13WrappedScript12RunInContextERKN2v89ArgumentsE_ZN4node13WrappedScript16RunInThisContextERKN2v89ArgumentsE_ZN4node13WrappedScript15RunInNewContextERKN2v89ArgumentsE_ZN4node13WrappedScript19CompileRunInContextERKN2v89ArgumentsE_ZN4node13WrappedScript23CompileRunInThisContextERKN2v89ArgumentsE_ZN4node13WrappedScript22CompileRunInNewContextERKN2v89ArgumentsE_ZN4node10ObjectWrap5UnrefEv_ZN4node10ObjectWrapD0Ev_ZN4node14WrappedContextD2Ev_ZTVN4node14WrappedContextE_ZN4node14WrappedContextD1Ev_ZN4node14WrappedContextD0Ev_ZN4node13WrappedScriptD2Ev_ZTVN4node13WrappedScriptE_ZN4node13WrappedScriptD1Ev_ZN4node13WrappedScriptD0Ev_ZN4node11CloneObjectEPN2v87IsolateENS0_6HandleINS0_6ObjectEEENS3_INS0_5ValueEEES7__ZN4node14WrappedContext10InstanceOfEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN4node14WrappedContextC2EPNS_7commonsE_ZN4node14WrappedContextC1EPNS_7commonsE_ZN4node14WrappedContext11NewInstanceEPNS_7commonsE_ZN4node14WrappedContext12GetV8ContextEv_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE1EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEEnode_evals_module_ZN4node11StringBytes7JXWriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEbPi__x86.get_pc_thunk.bx_ZN4node11StringBytes5WriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEPi_ZN4node11StringBytes13IsValidStringEN2v86HandleINS1_6StringEEENS_8encodingE_ZN4node11StringBytes13JXStorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZN4node11StringBytes11StorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingE_ZN4node11StringBytes6JXSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZN4node11StringBytes4SizeEN2v86HandleINS1_5ValueEEENS_8encodingE_ZN4node11StringBytes6EncodeEPKcjNS_8encodingE_ZN4node13SlabAllocatorC2EjPNS_7commonsE__x86.get_pc_thunk.bx_ZN4node13SlabAllocatorC1EjPNS_7commonsE_ZN4node13SlabAllocatorD2Ev_ZN4node13SlabAllocatorD1Ev_ZN4node13SlabAllocator10InitializeEv_ZN4node13SlabAllocator8AllocateEN2v86HandleINS1_6ObjectEEEj_ZN4node13SlabAllocator6ShrinkEN2v86HandleINS1_6ObjectEEEPcj_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN4node10ObjectWrap3RefEv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN4node11StatWatcher8CallbackEP12uv_fs_poll_siPK4statS5__ZN4node10ObjectWrap5UnrefEv_ZN4node10ObjectWrapD0Ev_ZN4node11StatWatcherC2Ev_ZTVN4node11StatWatcherE_ZN4node11StatWatcherC1Ev_ZN4node11StatWatcher3NewERKN2v89ArgumentsE_ZN4node11StatWatcher5StartERKN2v89ArgumentsE_ZN4node11StatWatcher4StopEv_ZN4node11StatWatcher4StopERKN2v89ArgumentsE_ZN4node11StatWatcherD2Ev_ZN4node11StatWatcherD1Ev_ZN4node11StatWatcherD0Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN4node10ObjectWrap3RefEv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN4node6crypto13SecureContext18GetSessionCallbackEP6ssl_stPhiPi_ZN4node6crypto15SessionDataFreeEPcPv_ZN4node6crypto15RandomBytesFreeEPcPv_ZN4node6crypto13SecureContext18NewSessionCallbackEP6ssl_stP14ssl_session_st_ZN4node6crypto15RandomBytesWorkILb0EEEvP9uv_work_s_ZN4node6crypto10Connection27AdvertiseNextProtoCallback_EP6ssl_stPPKhPjPv_ZN4node6crypto13SecureContext18PskServerCallback_EP6ssl_stPKcPhj_ZN4node6crypto10Connection24SelectNextProtoCallback_EP6ssl_stPPhS4_PKhjPv_ZN4node6crypto10Connection18PskClientCallback_EP6ssl_stPKcPcjPhj_ZN4node6crypto13GetSSLCiphersERKN2v89ArgumentsE_ZN4node6crypto10GetCiphersERKN2v89ArgumentsE_ZN4node6crypto9GetHashesERKN2v89ArgumentsE_ZN4node6crypto15RandomBytesWorkILb1EEEvP9uv_work_s_ZN4node6crypto10Connection15SSLInfoCallbackEPK6ssl_stii_ZN4node10ObjectWrap5UnrefEv_ZN4node6crypto8DecipherD2Ev_ZTVN4node6crypto8DecipherE_ZN4node6crypto8DecipherD1Ev_ZN4node6crypto4SignD2Ev_ZTVN4node6crypto4SignE_ZN4node6crypto4SignD1Ev_ZN4node6crypto6VerifyD2Ev_ZTVN4node6crypto6VerifyE_ZN4node6crypto6VerifyD1Ev_ZN4node6crypto4HmacD2Ev_ZTVN4node6crypto4HmacE_ZN4node6crypto4HmacD1Ev_ZN4node6crypto4HashD2Ev_ZTVN4node6crypto4HashE_ZN4node6crypto4HashD1Ev_ZN4node6crypto6CipherD2Ev_ZTVN4node6crypto6CipherE_ZN4node6crypto6CipherD1Ev_ZN4node10ObjectWrapD0Ev_ZN4node6crypto13DiffieHellmanD2Ev_ZTVN4node6crypto13DiffieHellmanE_ZN4node6crypto13DiffieHellmanD1Ev_ZN4node6crypto4ECDHD2Ev_ZTVN4node6crypto4ECDHE_ZN4node6crypto4ECDHD1Ev_ZN4node6crypto4HmacD0Ev_ZN4node6crypto6VerifyD0Ev_ZN4node6crypto4HashD0Ev_ZN4node6crypto4SignD0Ev_ZN4node6crypto8DecipherD0Ev_ZN4node6crypto6CipherD0Ev_ZN4node6crypto13DiffieHellmanD0Ev_ZN4node6crypto4ECDHD0Ev_ZN4node6crypto13SecureContextD2Ev_ZTVN4node6crypto13SecureContextE_ZN4node6crypto13SecureContextD1Ev_ZN4node6crypto13SecureContextD0Ev_ZN4node6crypto6Verify3NewERKN2v89ArgumentsE_ZN4node6crypto6Cipher3NewERKN2v89ArgumentsE_ZN4node6crypto4Hmac3NewERKN2v89ArgumentsE_ZN4node6crypto8Decipher3NewERKN2v89ArgumentsE_ZN4node6crypto4Sign3NewERKN2v89ArgumentsE_ZN4node6crypto13SecureContext3NewERKN2v89ArgumentsE_ZN4node6crypto10ConnectionD2Ev_ZTVN4node6crypto10ConnectionE_ZN4node6crypto10ConnectionD1Ev_ZN4node6crypto10ConnectionD0Ev_ZN4node6crypto4ECDH3NewERKN2v89ArgumentsE_ZN4node6crypto15PublicKeyCipher14PrivateDecryptERKN2v89ArgumentsE_ZN4node6crypto15PublicKeyCipher13PublicEncryptERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman18DiffieHellmanGroupERKN2v89ArgumentsEmodp_groups_ZN4node6crypto13DiffieHellman3NewERKN2v89ArgumentsE_ZN4node6crypto13SecureContext5CloseERKN2v89ArgumentsE_ZN4node6crypto6Cipher14SetAutoPaddingERKN2v89ArgumentsE_ZN4node6crypto8Decipher14SetAutoPaddingERKN2v89ArgumentsE_ZN4node6crypto4ECDH12GenerateKeysERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman12GetGeneratorERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman8GetPrimeERKN2v89ArgumentsE_ZN4node6crypto4Hmac10HmacDigestERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman12GenerateKeysERKN2v89ArgumentsE_ZN4node6crypto4Hash10HashDigestERKN2v89ArgumentsE_ZN4node6crypto13SecureContext6AddCRLERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman13GetPrivateKeyERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman12GetPublicKeyERKN2v89ArgumentsE_ZN4node6crypto6Cipher11CipherFinalERKN2v89ArgumentsE_ZN4node6crypto8Decipher13DecipherFinalERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman12SetPublicKeyERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman13SetPrivateKeyERKN2v89ArgumentsE_ZN4node6crypto13SecureContext10SetOptionsERKN2v89ArgumentsE_ZN4node6crypto4ECDH13GetPrivateKeyERKN2v89ArgumentsE_ZN4node6crypto4ECDH12GetPublicKeyERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman13ComputeSecretERKN2v89ArgumentsE_ZN4node6crypto13SecureContext9AddCACertERKN2v89ArgumentsE_ZN4node6crypto4ECDH13SetPrivateKeyERKN2v89ArgumentsE_ZN4node6crypto4Sign9SignFinalERKN2v89ArgumentsE_ZN4node6crypto4ECDH12SetPublicKeyERKN2v89ArgumentsE_ZN4node6crypto13SecureContext12AddRootCertsERKN2v89ArgumentsE_ZN4node10root_certsE_ZN4node6crypto13SecureContext10LoadPKCS12ERKN2v89ArgumentsE_ZN4node6crypto4Sign8SignInitERKN2v89ArgumentsE_ZN4node6crypto6Verify10VerifyInitERKN2v89ArgumentsE_ZN4node6crypto4Hmac8HmacInitERKN2v89ArgumentsE_ZN4node6crypto13SecureContext20SetPskServerCallbackERKN2v89ArgumentsE_ZN4node6crypto4ECDH13ComputeSecretERKN2v89ArgumentsE_ZN4node6crypto13SecureContext10SetPskHintERKN2v89ArgumentsE_ZN4node6crypto13SecureContext6SetKeyERKN2v89ArgumentsE_ZN4node6crypto13SecureContext10SetCiphersERKN2v89ArgumentsE_ZN4node6crypto6Cipher12CipherInitIvERKN2v89ArgumentsE_ZN4node6crypto8Decipher12DecipherInitERKN2v89ArgumentsE_ZN4node6crypto6Cipher10CipherInitERKN2v89ArgumentsE_ZN4node6crypto6Cipher12CipherUpdateERKN2v89ArgumentsE_ZN4node6crypto4Hash3NewERKN2v89ArgumentsE_ZN4node6crypto4Sign10SignUpdateERKN2v89ArgumentsE_ZN4node6crypto4Hmac10HmacUpdateERKN2v89ArgumentsE_ZN4node6crypto4Hash10HashUpdateERKN2v89ArgumentsE_ZN4node6crypto6Verify12VerifyUpdateERKN2v89ArgumentsE_ZN4node6crypto6Verify11VerifyFinalERKN2v89ArgumentsE_ZN4node6crypto13SecureContext4InitERKN2v89ArgumentsE_ZN4node6crypto8Decipher14DecipherUpdateERKN2v89ArgumentsE_ZN4node6crypto8Decipher14DecipherInitIvERKN2v89ArgumentsE_ZN4node6crypto13SecureContext19SetSessionIdContextERKN2v89ArgumentsE_ZN4node6crypto13EntropySourceEPhj_ZN4node6crypto29SSL_CTX_use_certificate_chainEP10ssl_ctx_stP6bio_st_ZN4node6crypto13SecureContext7SetCertERKN2v89ArgumentsE_ZN4node6crypto10Connection14HandleBIOErrorEP6bio_stPKci_ZN4node6crypto10Connection14HandleSSLErrorEPKciNS1_10ZeroStatusENS1_13SyscallStatusE_ZN4node6crypto10Connection10ClearErrorEv_ZN4node6crypto10Connection10GetSessionERKN2v89ArgumentsE_ZN4node6crypto10Connection11VerifyErrorERKN2v89ArgumentsE_ZN4node6crypto10Connection16GetCurrentCipherERKN2v89ArgumentsE_ZN4node6crypto10Connection18GetPeerCertificateERKN2v89ArgumentsE_ZN4node6crypto10Connection10SetSessionERKN2v89ArgumentsE_ZN4node6crypto10Connection15IsSessionReusedERKN2v89ArgumentsE_ZN4node6crypto10Connection14IsInitFinishedERKN2v89ArgumentsE_ZN4node6crypto10Connection5CloseERKN2v89ArgumentsE_ZN4node6crypto10Connection18GetNegotiatedProtoERKN2v89ArgumentsE_ZN4node6crypto10Connection15SetNPNProtocolsERKN2v89ArgumentsE_ZN4node6crypto10Connection13GetServernameERKN2v89ArgumentsE_ZN4node6crypto10Connection14SetSNICallbackERKN2v89ArgumentsE_ZN4node6crypto10Connection20SetPskClientCallbackERKN2v89ArgumentsE_ZN4node6crypto10Connection12ClearPendingERKN2v89ArgumentsE_ZN4node6crypto10Connection10EncPendingERKN2v89ArgumentsE_ZN4node6crypto10Connection5StartERKN2v89ArgumentsE_ZN4node6crypto10Connection16SetShutdownFlagsEv_ZN4node6crypto17ClientHelloParser6FinishEv_ZN4node6crypto17ClientHelloParser5WriteEPKhj_ZN4node6crypto10Connection11LoadSessionERKN2v89ArgumentsE_ZN4node6crypto10Connection5EncInERKN2v89ArgumentsE_ZN4node6crypto10Connection8ClearOutERKN2v89ArgumentsE_ZN4node6crypto10Connection6EncOutERKN2v89ArgumentsE_ZN4node6crypto10Connection7ClearInERKN2v89ArgumentsE_ZN4node6crypto10Connection8ShutdownERKN2v89ArgumentsE_ZN4node6crypto10Connection7InitNPNEPNS0_13SecureContextEb_ZN4node6crypto10Connection3NewERKN2v89ArgumentsE_ZN4node6crypto10Connection25SelectSNIContextCallback_EP6ssl_stPiPv_ZN4node6crypto10EIO_PBKDF2EPNS0_10pbkdf2_reqE_ZN4node6crypto10EIO_PBKDF2EP9uv_work_s_ZN4node6crypto15EIO_PBKDF2AfterEPNS_7commonsEPNS0_10pbkdf2_reqEPN2v85LocalINS5_5ValueEEE_ZN4node6crypto17EIO_PBKDF2CleanupEPNS0_10pbkdf2_reqE_ZN4node6crypto15EIO_PBKDF2AfterEP9uv_work_si_ZN4node6crypto6PBKDF2ERKN2v89ArgumentsE_ZN4node6crypto18RandomBytesRequestD2Ev_ZN4node6crypto18RandomBytesRequestD1Ev_ZN4node6crypto16RandomBytesCheckEPNS_7commonsEPNS0_18RandomBytesRequestEPN2v85LocalINS5_5ValueEEE_ZN4node6crypto16RandomBytesAfterEP9uv_work_si_ZN4node6crypto11RandomBytesILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN4node6crypto11RandomBytesILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN4node18SetPrototypeMethodIN2v85LocalINS1_16FunctionTemplateEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE_ZN4node9SetMethodIN2v86HandleINS1_6ObjectEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN4node6crypto10InitCryptoEN2v86HandleINS1_6ObjectEEEnode_crypto_modulegroup_modp1two_generatorgroup_modp2group_modp5group_modp14group_modp15group_modp16group_modp17group_modp18_ZN6jxcore8JXStringC2Ev_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXStringdeEv_ZNK6jxcore8JXStringdeEv_ZN6jxcore8JXStringC2EN2v86HandleINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXString10SetFromSTDEPKciPv_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringC2EPKcPv_ZN6jxcore8JXStringC1EPKcPv_ZN6jxcore8JXString7DisposeEv_ZN6jxcore8JXStringD2Ev_ZN6jxcore8JXStringD1Ev__x86.get_pc_thunk.bx_ZN14v8_typed_array14AttachBindingsEN2v86HandleINS0_6ObjectEEE_ZN14v8_typed_array25SizeOfArrayElementForTypeEN2v817ExternalArrayTypeE__x86.get_pc_thunk.cx_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN4node10ObjectWrap3RefEv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN12node_sqlite38Database14Work_BeginExecEPNS0_5BatonE_ZN12node_sqlite38Database14Work_AfterExecEP9uv_work_s_ZN12node_sqlite38Database9Work_ExecEP9uv_work_s_ZN12node_sqlite38Database23Work_BeginLoadExtensionEPNS0_5BatonE_ZN12node_sqlite38Database23Work_AfterLoadExtensionEP9uv_work_s_ZN12node_sqlite38Database18Work_LoadExtensionEP9uv_work_s_ZN12node_sqlite38Database14SetBusyTimeoutEPNS0_5BatonE_ZN5AsyncISsN12node_sqlite38DatabaseEE8listenerEP10uv_async_si_ZN5AsyncIN12node_sqlite38Database11ProfileInfoES1_E8listenerEP10uv_async_si_ZN5AsyncIN12node_sqlite38Database10UpdateInfoES1_E8listenerEP10uv_async_si_ZN5AsyncISsN12node_sqlite38DatabaseEE5closeEP11uv_handle_s_ZN5AsyncIN12node_sqlite38Database11ProfileInfoES1_E5closeEP11uv_handle_s_ZN5AsyncIN12node_sqlite38Database10UpdateInfoES1_E5closeEP11uv_handle_s_ZN4node10ObjectWrap5UnrefEv_ZN12node_sqlite38Database13TraceCallbackEPvPKc_ZN4node10ObjectWrapD0Ev_ZN12node_sqlite38Database5BatonD2Ev_ZTVN12node_sqlite38Database5BatonE_ZN12node_sqlite38Database5BatonD1Ev_ZN12node_sqlite38Database9ExecBatonD2Ev_ZTVN12node_sqlite38Database9ExecBatonE_ZN12node_sqlite38Database9ExecBatonD1Ev_ZN12node_sqlite38Database9OpenBatonD2Ev_ZTVN12node_sqlite38Database9OpenBatonE_ZN12node_sqlite38Database9OpenBatonD1Ev_ZN12node_sqlite38Database18LoadExtensionBatonD2Ev_ZTVN12node_sqlite38Database18LoadExtensionBatonE_ZN12node_sqlite38Database18LoadExtensionBatonD1Ev_ZN12node_sqlite38Database5BatonD0Ev_ZN12node_sqlite38Database23RegisterProfileCallbackEPNS0_5BatonE_ZN12node_sqlite38Database15ProfileCallbackEPS0_PNS0_11ProfileInfoE_ZN12node_sqlite38Database15ProfileCallbackEPvPKcy_ZN12node_sqlite38Database21RegisterTraceCallbackEPNS0_5BatonE_ZN12node_sqlite38Database13TraceCallbackEPS0_PSs_ZN12node_sqlite38Database9OpenBatonD0Ev_ZN12node_sqlite38Database9ExecBatonD0Ev_ZN12node_sqlite38Database18LoadExtensionBatonD0Ev_ZN12node_sqlite38Database9Work_OpenEP9uv_work_s_ZN12node_sqlite38Database14UpdateCallbackEPviPKcS3_x_ZN12node_sqlite38Database14UpdateCallbackEPS0_PNS0_10UpdateInfoE_ZN12node_sqlite38Database10Work_CloseEP9uv_work_s_ZN12node_sqlite38Database7ProcessEv_ZN12node_sqlite38Database14Work_AfterOpenEP9uv_work_s_ZN12node_sqlite38Database15Work_AfterCloseEP9uv_work_s_ZN12node_sqlite38Database9Work_WaitEPNS0_5BatonE_ZN12node_sqlite38Database14Work_BeginOpenEPNS0_5BatonE_ZN12node_sqlite38Database10OpenGetterEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN12node_sqlite38Database9SerializeERKN2v89ArgumentsE_ZN12node_sqlite38Database11ParallelizeERKN2v89ArgumentsE_ZN12node_sqlite38Database22RegisterUpdateCallbackEPNS0_5BatonE_ZN12node_sqlite38Database15RemoveCallbacksEv_ZN12node_sqlite38DatabaseD2Ev_ZTVN12node_sqlite38DatabaseE_ZN12node_sqlite38DatabaseD1Ev_ZN12node_sqlite38Database15Work_BeginCloseEPNS0_5BatonE_ZN12node_sqlite38DatabaseD0Ev_ZNSt11_Deque_baseIPN12node_sqlite38Database4CallESaIS3_EE17_M_initialize_mapEj_ZN12node_sqlite38Database3NewERKN2v89ArgumentsE_ZNSt5dequeIPN12node_sqlite38Database4CallESaIS3_EE16_M_push_back_auxERKS3__ZN12node_sqlite38Database8ScheduleEPFvPNS0_5BatonEES2_b_ZN12node_sqlite38Database5CloseERKN2v89ArgumentsE_ZN12node_sqlite38Database9ConfigureERKN2v89ArgumentsE_ZN12node_sqlite38Database4ExecERKN2v89ArgumentsE_ZN12node_sqlite38Database4WaitERKN2v89ArgumentsE_ZN12node_sqlite38Database13LoadExtensionERKN2v89ArgumentsE_ZN6jxcore11ThreadStoreIN2v810PersistentINS1_16FunctionTemplateEEEE4mtedE_ZN12node_sqlite38Database13jx_persistentE_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_ZN4node10ObjectWrap3RefEv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN4node10ObjectWrapD1Ev_ZN12node_sqlite39Statement17Work_BeginPrepareEPNS_8Database5BatonE_ZN12node_sqlite39Statement17Work_AfterPrepareEP9uv_work_s_ZN12node_sqlite39Statement12Work_PrepareEP9uv_work_s_ZN12node_sqlite39Statement14Work_BeginBindEPNS0_5BatonE_ZN12node_sqlite39Statement14Work_AfterBindEP9uv_work_s_ZN12node_sqlite39Statement9Work_BindEP9uv_work_s_ZN12node_sqlite39Statement13Work_BeginGetEPNS0_5BatonE_ZN12node_sqlite39Statement13Work_AfterGetEP9uv_work_s_ZN12node_sqlite39Statement8Work_GetEP9uv_work_s_ZN12node_sqlite39Statement13Work_BeginRunEPNS0_5BatonE_ZN12node_sqlite39Statement13Work_AfterRunEP9uv_work_s_ZN12node_sqlite39Statement8Work_RunEP9uv_work_s_ZN12node_sqlite39Statement13Work_BeginAllEPNS0_5BatonE_ZN12node_sqlite39Statement13Work_AfterAllEP9uv_work_s_ZN12node_sqlite39Statement8Work_AllEP9uv_work_s_ZN12node_sqlite39Statement15Work_BeginResetEPNS0_5BatonE_ZN12node_sqlite39Statement15Work_AfterResetEP9uv_work_s_ZN12node_sqlite39Statement10Work_ResetEP9uv_work_s_ZN4node10ObjectWrap5UnrefEv_ZN12node_sqlite39Statement14Work_BeginEachEPNS0_5BatonE_ZN12node_sqlite39Statement9AsyncEachEP10uv_async_si_ZN12node_sqlite39Statement14Work_AfterEachEP9uv_work_s_ZN12node_sqlite39Statement9Work_EachEP9uv_work_s_ZN12node_sqlite39Statement13CloseCallbackEP11uv_handle_s_ZN4node10ObjectWrapD0Ev_ZN12node_sqlite38Database5BatonD2Ev_ZTVN12node_sqlite38Database5BatonE_ZN12node_sqlite38Database5BatonD1Ev_ZN12node_sqlite38Database5BatonD0Ev_ZN12node_sqlite39Statement5BatonD2Ev_ZTVN12node_sqlite39Statement5BatonE_ZN12node_sqlite39Statement5BatonD1Ev_ZN12node_sqlite39Statement8RunBatonD2Ev_ZN12node_sqlite39Statement8RunBatonD1Ev_ZN12node_sqlite39Statement9EachBatonD2Ev_ZN12node_sqlite39Statement9EachBatonD1Ev_ZN12node_sqlite39Statement9EachBatonD0Ev_ZN12node_sqlite39Statement9RowsBatonD2Ev_ZTVN12node_sqlite39Statement9RowsBatonE_ZN12node_sqlite39Statement9RowsBatonD1Ev_ZN12node_sqlite39Statement8RowBatonD2Ev_ZTVN12node_sqlite39Statement8RowBatonE_ZN12node_sqlite39Statement8RowBatonD1Ev_ZN12node_sqlite39Statement5BatonD0Ev_ZN12node_sqlite39Statement8RunBatonD0Ev_ZN12node_sqlite39Statement8RowBatonD0Ev_ZN12node_sqlite39Statement9RowsBatonD0Ev_ZN12node_sqlite39Statement4BindERKSt6vectorIPNS_6Values5FieldESaIS4_EE_ZN12node_sqlite39Statement7RowToJSEPSt6vectorIPNS_6Values5FieldESaIS4_EE_ZN12node_sqlite39Statement10CleanQueueEv_ZN12node_sqlite39Statement7ProcessEv_ZN12node_sqlite39Statement8FinalizeEv_ZN12node_sqlite39Statement12PrepareBatonD2Ev_ZTVN12node_sqlite39Statement12PrepareBatonE_ZN12node_sqlite39Statement12PrepareBatonD1Ev_ZN12node_sqlite39Statement8FinalizeEPNS0_5BatonE_ZN12node_sqlite39StatementD2Ev_ZTVN12node_sqlite39StatementE_ZN12node_sqlite39StatementD1Ev_ZN12node_sqlite39Statement12PrepareBatonD0Ev_ZN12node_sqlite39StatementD0Ev_ZN12node_sqlite39Statement5ErrorINS0_12PrepareBatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_5BatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_8RowBatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_8RunBatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_9RowsBatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_9EachBatonEEEvPT__ZN12node_sqlite39Statement13BindParameterIiEEPNS_6Values5FieldEN2v86HandleINS5_5ValueEEET__ZNSt6vectorIPS_IPN12node_sqlite36Values5FieldESaIS3_EESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6__ZNSt6vectorIPN12node_sqlite36Values5FieldESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3__ZN12node_sqlite39Statement4BindINS0_5BatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZN12node_sqlite39Statement4BindINS0_8RowBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZN12node_sqlite39Statement4BindINS0_8RunBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZTVN12node_sqlite39Statement8RunBatonE_ZN12node_sqlite39Statement4BindINS0_9RowsBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZN12node_sqlite39Statement4BindINS0_9EachBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZTVN12node_sqlite39Statement9EachBatonE_ZN12node_sqlite39Statement6GetRowEPSt6vectorIPNS_6Values5FieldESaIS4_EEP12sqlite3_stmt_ZNSt11_Deque_baseIPN12node_sqlite39Statement4CallESaIS3_EE17_M_initialize_mapEj_ZN12node_sqlite39Statement3NewERKN2v89ArgumentsE_ZNSt5dequeIPN12node_sqlite39Statement4CallESaIS3_EE16_M_push_back_auxERKS3__ZN12node_sqlite39Statement8ScheduleEPFvPNS0_5BatonEES2__ZN12node_sqlite39Statement5ResetERKN2v89ArgumentsE_ZN12node_sqlite39Statement8FinalizeERKN2v89ArgumentsE_ZN12node_sqlite39Statement4BindERKN2v89ArgumentsE_ZN12node_sqlite39Statement3GetERKN2v89ArgumentsE_ZN12node_sqlite39Statement3RunERKN2v89ArgumentsE_ZN12node_sqlite39Statement3AllERKN2v89ArgumentsE_ZN12node_sqlite39Statement4EachERKN2v89ArgumentsE_ZN6jxcore11ThreadStoreIN2v810PersistentINS1_16FunctionTemplateEEEE4mtedE_ZN12node_sqlite39Statement13jx_persistentE_ZN12node_sqlite314RegisterModuleEN2v86HandleINS0_6ObjectEEE__x86.get_pc_thunk.bx_Z18sqlite_code_stringi__x86.get_pc_thunk.cx_Z24sqlite_authorizer_stringi// 154 ` error_definition.o/ node_http_parser.o/ node_constants.o/ node_extensions.o/ node_javascript.o/ slab_allocator.o/ node_stat_watcher.o/ v8_typed_array.o/ EngineLogger.o/ 1560953064 501 20 100644 656 ` ELF(4( GCC: (GNU) 4.9.x 20150123 (prerelease).symtab.strtab.shstrtab.text.data.bss.comment.note.GNU-stackEngineLogger.cc4!4'4,04(5\\Ep extend.o/ 1560953067 501 20 100644 26436 ` ELF,R4(HIKLNOQRWXZ[`a~UWVSd$ԍ D$D$D$p$xt/9s'$9wD$$l$(D$;D$ud$,[^_]n < CUSTOMLOCKSCOUNT && "Given lock id is undefined"n < MAX_JX_THREADS + 1 && "Given lock id is undefined"id >= 0 && id < external_methods_count../src/jx/extend.ccUSd$D$ $d$[]D$0D$ D$$USd$D$ $d$[]D$5D$ D$$USd$D$ $d$[]D$:D$ D$$USd$D$ @$d$[]D$?D$ D$$USd$D$ @$d$[]D$DD$ D$$D$9UVSd$D$0NV9tVd$ [^]ÍvV l$(D$$VD$JNRV VNd$ [^]UWVSd$č|$P4‹N F9t t |$T8FFd$<[^_]Ít&F$nL$D$))vT$l$HT$T$BT$DtL$TTBHN$@FN B끋FD$ D$)HD$(L$$9vfD$+l$(L$,+L$ 9l$ ZnEF FD$$DF$FF D$D$ D-D$=?3D$l$HT$ $D$‹D$+D$(,T$ ‹H@$L$ )ȉl$,l$HT$(D$ $T$D$ l$,T$PT$( D$ l$L$D$D$$T$Dl$H)ȉ$l$T$D$'D$D$ ,$l$ l$HD$T$(T$(l$ HD$ ,$l$l$HL$D$T$l$T$yl$HUWVSd$ԋt$@T$DtgT$B$T$ǃr1u'ud$,[^_]Ðt& . /却&fftߍ&1UVSd$$$d$[^]USd$$D$ $d$[]USd$$$d$[]USd$$$d$[]UV1Sd$$T$ ; $d$[^]UVSd$$$+d$[^]UWVSd$䀻t d$[^_]ÍvD$l$($ ƃ~@4$9ut&4$9uud$[^_]UWVSd$䀻tsl$(ƃ~@4$9ut&4$9utvd$[^_]UWVSd$ԋD$DL$@pB‰A$L$@I)4ljD$9sf$G9wL$@D$AA QVQ$vAD$DqQ Ad$,[^_]UWVSd$|$4t'vW D$0T$$w<$u܍d$[^_]UWVSd$D$0xt$W D$0T$$w<$u܍d$[^_]UWVSd$|$4t'vW D$0T$$w<$u܍d$[^_]UWVSd$ԍǃD$t1'W D$T$$w<$u܋  ǃ9ǃD$tfF$4$;D$u勻D$t5W D$T$$w<$u܋D$ǃǃ d$,[^_]UWVSd$D$0xt$W D$0T$$w<$u܍d$[^_]UWVSd$ԋD$D|$@ptPD$HFtƋV9F 1ut$u(9N7Gd$,[^_]pt&'D$D9p t;4$l$8t$ŋD$HU9~D$Gd$,[^_]wUWVSd$ċM|9p t&t 9O} u99NM9 E4$UȉMM̋U9HH DE9E9A$UȉMUƋM̋EVUȉFL$T$ t$<$Fe[^_]ËMEtM9N}B1hMEЉL$RT$$Uԃ}Ѕ҉щt5UEЉT$ƿ7D$D$ D$$UWVSd$ԋD$D|$@ptPD$HFtƋV9F 1ut$u(9N7Gd$,[^_]pt&'D$D9p t;4$l$8t$ŋD$HU9~D$Gd$,[^_]wUWVSd$GE̅CU vt ;~~v u;Uȉ;z'E AE$}̋Eȃt&vt ;~~v u9;z}9 E$M̉UM;xP ҋUDEU̅JU9?E9BE$M}‹uMĉxpẺT$L$ D$EỦ$U̍xEȉBe[^_]Í&}9 E $UĉM;xx M̋UąDEυ;}G9E$UEQAEȉL$|$4$D$ MMȉE.t&}E;z1t&}E;y1EMȍUT$EЍQ$T$EԃuЅljE{UEЉT$QT$$EԃuЉE̅uWxEȉBe[^_]ÍUEЉT$뷍UEЉT$fEEGt7UWVSd$ċM|9p t&t 9O} u99NM9 E4$UȉMM̋U9HH DE9E9A$UȉMUƋM̋EVUȉFL$T$ t$<$Fe[^_]ËMEtM9N}B1hMEЉL$RT$$Uԃ}Ѕ҉щt5UEЉT$ƿ7D$D$ D$$UWVSd$4$t$D$,D$$( Ɖ|$$|$8|$(vD$(l$xD$D$8$D$<D$@D$DD$HD$LD$PD$TD$XD$\D$\L$PT$H+D$LF+L$TF+T$@F FFFFF F$D$4$FT$L|$HD$FT$nD$D$\D$ D$@)ыT$P+T$Tщʉ)хt$ T$092a96ut$ T$\|$LD$8tNJl$x9v;t$$9wt$D$8$(;t$$|$,D$l$x$|$|$ @D$ǃǃ$ǃ|$ @D$ǃǃ$ǃd$l[^_]Ðt&t$Vvt$&t$Fvt$|$T$ void threadUnlock(int)void threadLock(int)void customUnlock(int)void customLock(int)int tryCustomLock(int)const char* GetExternalMethodName(int)v8::Handle (* GetExternalMethodTarget(int))(const v8::Arguments&) $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (AB CAAA H$\^AB An A A $^AB An A A $^AB An A A $^AB An A A $^AB An A A $$@8zAA AO0g A AAD vA AA<|AA AAOPt AA AAE <AC AAO@A AA AAF $<AB BrCA  $<AB AvA  H9AB AsA  l9AB AsA (WAB ACMAA $LAB BDAA PAA AAO0M AA AAD yAA AA88AA AAO0AA AA(tAG CAAA (MAB CCAAA (MAB CCAAA (MAB CCAAA ,$1AB C'AAA (TMAB CCAAA TAA AAO@V CA AAC I AC AAC ,AB C AAA A TAA AAO@V CA AAC I AC AAC <`AB C} CAA H  CAA A ,AB C AAA A @VAC AAO AA AAF (.symtab.strtab.shstrtab.text.data.bss.text.unlikely.__tcf_0.rel.text.__tcf_0.text.unlikely._Z22GetExternalMethodCountv.rel.text._Z22GetExternalMethodCountv.rodata.str1.4.rodata.str1.1.text.unlikely._Z13tryCustomLocki.rel.text._Z13tryCustomLocki.text.unlikely._Z10customLocki.rel.text._Z10customLocki.text.unlikely._Z12customUnlocki.rel.text._Z12customUnlocki.text.unlikely._Z10threadLocki.rel.text._Z10threadLocki.text.unlikely._Z12threadUnlocki.rel.text._Z12threadUnlocki.text.unlikely._Z18IsThreadQueueEmptyi.rel.text._Z18IsThreadQueueEmptyi.text.unlikely._Z15pullThreadQueuei.rel.text._Z15pullThreadQueuei.text.unlikely._Z15pushThreadQueueiPc.rel.text._Z15pushThreadQueueiPc.text.unlikely._Z6cpystrPKci.rel.text._Z6cpystrPKci.text.unlikely._Z14getThreadCountv.rel.text._Z14getThreadCountv.text.unlikely._Z14setThreadCounti.rel.text._Z14setThreadCounti.text.unlikely._Z19increaseThreadCountv.rel.text._Z19increaseThreadCountv.text.unlikely._Z17reduceThreadCountv.rel.text._Z17reduceThreadCountv.text.unlikely._Z24checkIncreaseThreadCounti.rel.text._Z24checkIncreaseThreadCounti.text.unlikely._Z22getIncreaseThreadCountv.rel.text._Z22getIncreaseThreadCountv.text.unlikely._Z13jx_init_locksv.rel.text._Z13jx_init_locksv.text.unlikely._Z16jx_destroy_locksv.rel.text._Z16jx_destroy_locksv.text.unlikely._ZNSt11_Deque_baseIPcSaIS0_EE17_M_initialize_mapEj.rel.text._ZNSt11_Deque_baseIPcSaIS0_EE17_M_initialize_mapEj.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E.text.unlikely._ZNSt3mapIiPFN2v86HandleINS0_5ValueEEERKNS0_9ArgumentsEESt4lessIiESaISt4pairIKiS8_EEED2Ev.rel.text._ZNSt3mapIiPFN2v86HandleINS0_5ValueEEERKNS0_9ArgumentsEESt4lessIiESaISt4pairIKiS8_EEED2Ev.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E.text.unlikely._Z20ClearExternalMethodsv.rel.text._Z20ClearExternalMethodsv.text.unlikely._ZNSt3mapIiPcSt4lessIiESaISt4pairIKiS0_EEED2Ev.rel.text._ZNSt3mapIiPcSt4lessIiESaISt4pairIKiS0_EEED2Ev.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE24_M_get_insert_unique_posERS1_.text.unlikely._Z23GetExternalMethodTargeti.rel.text._Z23GetExternalMethodTargeti.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE24_M_get_insert_unique_posERS1_.text.unlikely._Z17AddExternalMethodPKcPFN2v86HandleINS1_5ValueEEERKNS1_9ArgumentsEE.rel.text._Z17AddExternalMethodPKcPFN2v86HandleINS1_5ValueEEERKNS1_9ArgumentsEE.text.unlikely._Z21GetExternalMethodNamei.rel.text._Z21GetExternalMethodNamei.text.unlikely._GLOBAL__sub_I_extend.cc.rel.text.startup._GLOBAL__sub_I_extend.cc.rel.init_array.rodata._ZZ12threadUnlockiE19__PRETTY_FUNCTION__.rodata._ZZ10threadLockiE19__PRETTY_FUNCTION__.rodata._ZZ12customUnlockiE19__PRETTY_FUNCTION__.rodata._ZZ10customLockiE19__PRETTY_FUNCTION__.rodata._ZZ13tryCustomLockiE19__PRETTY_FUNCTION__.rodata._ZZ21GetExternalMethodNameiE19__PRETTY_FUNCTION__.rodata._ZZ23GetExternalMethodTargetiE19__PRETTY_FUNCTION__.bss._ZL12store_inited.bss._ZL11threadCount.bss.threadLocks.bss._ZL22external_methods_count.bss._ZL21external_method_names.bss._ZL16external_methods.bss._ZL11threadQueue.bss.customLocks.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group     ( {$x@rjqpo!"n$%'(*+-.01 v34679:<=?@BCuEFHIKLNOQRTU-zCyWXZ[]^^Mt`acdfg'sijVj}lnopqrstuvwxyz{|}~8p[ ~^@|)^9G^Yi^yw^"$%z(+.<1+<4?97X9:oW=L@C "F8I\s"IM"LM"OM"O7M"R1UM"XM"XH"[ ^" d "a d  g. F S k extend.cc__tcf_0_ZL11threadQueue_ZL22external_methods_count_ZZ13tryCustomLockiE19__PRETTY_FUNCTION___ZZ10customLockiE19__PRETTY_FUNCTION___ZZ12customUnlockiE19__PRETTY_FUNCTION___ZZ10threadLockiE19__PRETTY_FUNCTION___ZZ12threadUnlockiE19__PRETTY_FUNCTION___ZL11threadCount_ZL12store_inited_ZL16external_methods_ZL21external_method_names_ZZ23GetExternalMethodTargetiE19__PRETTY_FUNCTION___ZZ21GetExternalMethodNameiE19__PRETTY_FUNCTION___GLOBAL__sub_I_extend.cc_ZStL8__ioinit.LC2.LC3.LC7.LC29_ZNSt3mapIiPFN2v86HandleINS0_5ValueEEERKNS0_9ArgumentsEESt4lessIiESaISt4pairIKiS8_EEED5Ev_ZNSt3mapIiPcSt4lessIiESaISt4pairIKiS0_EEED5Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZdlPv_Z22GetExternalMethodCountv__x86.get_pc_thunk.cx_Z13tryCustomLockicustomLocksuv_mutex_trylock__assert2_Z10customLockiuv_mutex_lock_Z12customUnlockiuv_mutex_unlock_Z10threadLockithreadLocks_Z12threadUnlocki_Z18IsThreadQueueEmptyi_Z15pullThreadQueuei_Z15pushThreadQueueiPc_Znwjmemmove_ZSt17__throw_bad_allocv_Z6cpystrPKcimalloc_Z14getThreadCountv_Z14setThreadCounti_Z19increaseThreadCountv_Z17reduceThreadCountv_Z24checkIncreaseThreadCounti_ZN4node7commons15threadPoolCountE_Z22getIncreaseThreadCountv_Z13jx_init_locksvsignaluv_mutex_init_ZN6XSpace9StoreInitEv_ZN6XSpace9INITSTOREEv_Z16jx_destroy_locksvuv_mutex_destroy_ZN6XSpace5StoreEv_ZN6XSpace9LOCKSTOREEv_ZN6XSpace10ClearStoreEv_ZN6XSpace11UNLOCKSTOREEv_ZN6XSpace12DESTROYSTOREEv_ZNSt11_Deque_baseIPcSaIS0_EE17_M_initialize_mapEj_ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E_ZNSt3mapIiPFN2v86HandleINS0_5ValueEEERKNS0_9ArgumentsEESt4lessIiESaISt4pairIKiS8_EEED2Ev_ZNSt3mapIiPFN2v86HandleINS0_5ValueEEERKNS0_9ArgumentsEESt4lessIiESaISt4pairIKiS8_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E_Z20ClearExternalMethodsvfree_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base_ZNSt3mapIiPcSt4lessIiESaISt4pairIKiS0_EEED2Ev_ZNSt3mapIiPcSt4lessIiESaISt4pairIKiS0_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiPFN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsEEESt10_Select1stISB_ESt4lessIiESaISB_EE24_M_get_insert_unique_posERS1__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_Z23GetExternalMethodTargeti_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__ZNSt8_Rb_treeIiSt4pairIKiPcESt10_Select1stIS3_ESt4lessIiESaIS3_EE24_M_get_insert_unique_posERS1__Z17AddExternalMethodPKcPFN2v86HandleINS1_5ValueEEERKNS1_9ArgumentsEEstrdup_Z21GetExternalMethodNamei_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitz { ci|{|~ { `z {)> jH ZR kZz {)> jH YR kZz {)> jH XR kZz {)> lH WR kZz {)> lH VR kZ~ { c cz { cO|z { c~||$^z {,z {) ^.z {, ^1z {( ^.z {( ^.z {(. ^8 ^Iz {"3 ^9 ^>z { ]= ]CIgqz { ]( ]GQgpy z {;kz {/:|z {/:|z {/:|z { b b# `OZ|f al br bx b~ a b b a a|  a a a$ az {/:|z {z {" `. b< bs b b b. b; bYp b b m \ kz {z { ` b+ `7 bv a a a4bh `n a b% `+ bB aZ ak az b b b ` `> aP br a} bz {" `. a< as a a a. a; aYp a a m [ kz { e) 7?E c@)|=|T lv b| b b b b b a a a a a aR L `(< "$&()L+p-/13<6x8:<>(@XDFH KdMORf,g4 @ L nX d op | ~z!',G C @LH(U7@ @tH2T2^ @H@^&`^" @H@<a^] @ I@y ^ @LI@~^ @I@"$ @I %8`z\ @I ({ @ JP+5@ @\J.< @tJ(18 _<[ @J(4yLP9 @J(79 @J(: <W8 @K8=`' 0 L @LK8@|   @KXC& @  @KhF5 { w @DL I V M R @dL L X M T @L ON /` M + @L R  1  @LU ( M $ @M X] N P @M[    @M^ X T @\Na   @tNde W ` @Og & @V @,Pj  @Ql H w     ' CM@@( @/@@@Tp0(008 @$Qh"$2 z =x commons.o/ 1560953068 501 20 100644 46232 ` ELF4(qrtuwxUVSt9&ыRt ;B~R u9t;A| [A^]Ív[^]USd$ud$[]Ívl$P;uЋd$[]Ít& callbackonerrordomainonstopexportsBufferstdiotypeignorepipefdhandletcpttyudpwrapTypewindowsVerbatimArgumentswraponexitaddressportfamilyIPv4IPv6uidgidfileargscwdenvPairsdetachedpid_charsWrittenSignalonsignalsessionIdlengthincomingparser__ptypeondataowner_tickCallback_errnobufferbytesonMessageCompleteonHeadersonBodyonHeadersCompleteheadersurlmethodstatusCodeupgradeshouldKeepAliveversionMinorversionMajor_immediateCallbackonmessagethreadMessageemitcloseontimeoutoncompleteonchangeonconnectiononreadonnewsessiononhandshakestartonhandshakedoneonclienthelloondoneonselectGETHEADPOSTjxcore-logmsecs > 0../src/jx/commons.ccUWVSd$ԋuU Uwt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$dž t$dž t$džt$džt$džt$dž t$dž t$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$dž8t$dž8<t$dž<@t$dž@Dt$džDHt$džH4t$dž4t$džt$džt$dž|t$dž|(t$dž(,t$dž,0t$dž0$t$dž$xt$džxPt$džPtt$džtLt$džLTt$džTXt$džX\t$dž\`t$dž`dt$dždht$džhlt$džlpt$džpt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$dže[^_]ÍvD$ EE|$ $D$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$ D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$ D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$8D$ED$ |$$U1t$<D$ED$ |$$U1t$@D$ED$ |$$U1t$DD$ED$ |$$U1t$HD$ED$ |$$U1t$4D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$|D$ED$ |$$U1t$(D$ED$ |$$U1t$,D$ED$ |$$U1t$0D$ED$ |$$U1t$$D$ED$ |$$U1t$xD$ED$ |$$U1t$PD$ED$ |$$U1t$tD$ED$ |$$U1t$LD$ED$ |$$U1t$TD$ED$ |$$U1t$XD$ED$ |$$U1t$\D$ED$ |$$U1t$`D$ED$ |$$U1t$dD$ED$ |$$U1t$hD$ED$ |$$U1t$lD$ED$ |$$U1t$pD$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$D$ED$ |$$U1t$e[^_]Ít&UUUWVSd$ԋt$@$~ ]$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džt$džL D$ t$W@t$G@;|$u͋t$džtw$džt$džt$t$dž4$D$d$,[^_]Ëu뫋F uUWVSd$t$0|$4t/1t<$4$D$d$[^_]ÍUVSd$t$ F$$$$$$F|$Ft$$F$t$$d$[^]UWVSd$ԍ4$ЋRt ;z~R u9t^;x|YP|t);WXt\<$l$8L$D$<$L$D$L$l$8$$4$l$8d$,[^_]Ít&DUfWVSd$|$4t$0dždždždždždždždždždždždždždždždždždždždždždždždždždždž dždždždždž dž$dž(dž,dž0dž4dž8dž<dž@džDdžHdžLdžPdžTdžXdž\dž`džddžhdžldžpdžtdžxdž|dždždždždždždždždždždždždždždždždždždždždždždždždždždždždždždždždž ,<L\l|dždždždždždždž~ ƃF FFdFhFlFpF0F,dž~XdždžF`F\FFFTF4F5F6F7F8F<F@FAFLFPFWFU$P@PP FVkfWFD$ Ft@FtFt@FxF$F F(F)$0$D$0$0$4$PF|$ FFX$tuD$FX$VXP$4FD$T$$@FVXd$[^_]ÍvFd$[^_]Ðt&USd$D$ @$d$[]U1VSu[^]Ívl$t+ vыRt ;B~R u9t;A} [^]Ð[A^]USd$ud$[]Ðl$P;Dd$[]D$USd$T$ D$$t$@X$d$[]UVSd$D$ x6$l$t$@t$D$@d$[^]D$@SL$:t[ÍvD$8CD$D$ 8r L$ [f[WVt$ |$#Bu2z^_8tÐT$8tÐT$T$8tÐt&҉8tÐT$iT$USd$싃RuT$ l$$T$d$[]UVSd$t$ 4$D$d$[^]The application has reached beyond the pre-defined memory limits (%ld >= %ld) The application has reached beyond the pre-defined cpu limits.The CPU usage was (%f) iso->node_isolate != NULL && "This shouldn't be null, beware using a thread Id before destroying " "the previous one"UWVSd$Fx>EЍUT$$}Ѓu"}V}9se[^_]Íe1[^_]$1ȋM D$ D$L$ T$D$UVSd$$$$D$D$(D$$T$xoMbd$,iD$(|$*X\X~?Yl$\$^D$D$D$d$p[^]Í&d$p[^]Í||$wD$D$ D$$UWVSd$ԋt$@|$Dl$HL$LT$D$+D$T$9~^fWɍl$8f.zdub$T$L$fWD$ǃD$ǃd$,[^_]Í&|9sd$,[^_]Í&$T$L$\$D$똍|$#UVSd$ЋD$@~gl$89NfWf.ztM$D$T$T$(L$(*f.s8ǃd$0[^]Í&$D$T$ʍ\$ D$$D$UWVSd$|$4t'vW D$0T$$w<$u܍d$[^_]UWVSd$D$0xt$W D$0T$$w<$u܍d$[^_]UWVSd$ԋD$D|$@ptPD$HFtƋV9F 1ut$u(9N7Gd$,[^_]pt&'D$D9p t;4$l$8t$ŋD$HU9~D$Gd$,[^_]wUWVSd$E ẺƉ",}̍&‹@t ;p~@ u}9;r|+EBĒt$e[^_]Í&u9 Et+$MĉUE;pM@ UUȅE9}9xE$Mu‹}MĉpxEȉT$L$ D$EUȉ$Uȃ'f$t&uEtSE;p~E1ҍIUEЉT$QT$$EԃUЉEȅUEЉT$E1UWVSd$䍻<$0V4$D$<$d$[^_]UVSd$|$ tmƃ ыRt ;B~R u9tg;A|bqtft.~6d$[^]Ívu1t4$d$[^]Ívufƃ$$~xUWVSd$t$0tJ<$D$FX$FXVXP<$d$[^_]D$D$ D$$USd$D$ $d$[]UVSd$$ƋD$ 4$D$4$d$[^]UWVSd$ԍ<$t$|$$D$D$D$<$t$|$$t$ @D$ǃǃ$ǃd$,[^_]double node::GetCPU(int64_t, double*)node::commons* node::setCommons(node::commons*)AY@ $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0aAB BJ DA D AFA 8PgAA OY  AAD i  AAE <AB C AAA D  AAA E ,AB C AAA A ,WAB C@ AAA G $,AB BAA <TAC AAO@ AA AAE <AF C? AAA D W AAA F )AB AcA HoAC AU  AAD   FAB A DA4DRAA OS  AAB g AA| ;AB AuA 0XAA AO BA AA$XA[ D m C G$8 L-LG XAp&/(;AA O g AA$<6AB BlAA d<xAB CP AAA G F AAA A 4AB B AA H G AA G T3AA AAO@ AA AAH L AA AAH 4HAA AO@{ A AAH (MAB CCAAA (MAB CCAAA TAA AAO@V CA AAC I AC AAC ,0AB C AAA H (`SAB CIAAA 4AB B} AA D r AA D ,AB Cc AAA A &AB A`A $BAB BzAA (@AB CAAA l.symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node7commons25threadIdFromThreadPrivateEv.rel.text._ZN4node7commons25threadIdFromThreadPrivateEv.text.unlikely._ZN4node7commons13getThreadLoopEv.rel.text._ZN4node7commons13getThreadLoopEv.rodata.str1.1.text.unlikely._ZN4node7commons9stringOPSEb.rel.text._ZN4node7commons9stringOPSEb.text.unlikely._ZN4node7commons7DisposeEv.rel.text._ZN4node7commons7DisposeEv.text.unlikely._ZN4node7commons10setProcessEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node7commons10setProcessEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node7commonsD2Ev.rel.text._ZN4node7commonsD2Ev.text.unlikely._ZN4node13removeCommonsEv.rel.text._ZN4node13removeCommonsEv.text.unlikely._ZN4node7commonsC2Ei.rel.text._ZN4node7commonsC2Ei.text.unlikely._ZN4node7commons10PingThreadEv.rel.text._ZN4node7commons10PingThreadEv.text.unlikely._ZN4node7commons18getCurrentThreadIdEv.rel.text._ZN4node7commons18getCurrentThreadIdEv.text.unlikely._ZN4node7commons11getInstanceEv.rel.text._ZN4node7commons11getInstanceEv.text.unlikely._ZN4node7commons21getInstanceByThreadIdEi.rel.text._ZN4node7commons21getInstanceByThreadIdEi.text.unlikely._ZN4node7commons12TriggerDummyEP10uv_async_si.rel.text._ZN4node7commons12TriggerDummyEP10uv_async_si.text.unlikely._ZN4node7commons11CleanPingerEi.rel.text._ZN4node7commons11CleanPingerEi.text.unlikely._ZN4node7commons14getInstanceIsoEPN2v87IsolateE.rel.text._ZN4node7commons14getInstanceIsoEPN2v87IsolateE.text.unlikely._ZN4node7commons17SetPortBoundariesEiib.rel.text._ZN4node7commons17SetPortBoundariesEiib.text.unlikely._ZN4node7commons14GetTCPBoundaryEv.rel.text._ZN4node7commons14GetTCPBoundaryEv.text.unlikely._ZN4node7commons15GetTCPSBoundaryEv.rel.text._ZN4node7commons15GetTCPSBoundaryEv.text.unlikely._ZN4node7commons12SetMaxMemoryEx.rel.text._ZN4node7commons12SetMaxMemoryEx.text.unlikely._ZN4node7commons10SetSysExecEi.rel.text._ZN4node7commons10SetSysExecEi.text.unlikely._ZN4node7commons26SetAllowLocalNativeModulesEi.rel.text._ZN4node7commons26SetAllowLocalNativeModulesEi.text.unlikely._ZN4node7commons23AllowLocalNativeModulesEv.rel.text._ZN4node7commons23AllowLocalNativeModulesEv.text.unlikely._ZN4node7commons16SetMonitoringAPIEb.rel.text._ZN4node7commons16SetMonitoringAPIEb.text.unlikely._ZN4node7commons18AllowMonitoringAPIEv.rel.text._ZN4node7commons18AllowMonitoringAPIEv.text.unlikely._ZN4node7commons9SetMaxCPUEii.rel.text._ZN4node7commons9SetMaxCPUEii.text.unlikely._ZN4node7commons9GetMaxCPUEv.rel.text._ZN4node7commons9GetMaxCPUEv.text.unlikely._ZN4node7commons17GetMaxCPUIntervalEv.rel.text._ZN4node7commons17GetMaxCPUIntervalEv.text.unlikely._ZN4node7commons19SetGlobalModulePathESs.rel.text._ZN4node7commons19SetGlobalModulePathESs.text.unlikely._ZN4node7commons19GetGlobalModulePathEv.rel.text._ZN4node7commons19GetGlobalModulePathEv.text.unlikely._ZN4node7commons10CanSysExecEv.rel.text._ZN4node7commons10CanSysExecEv.rodata.str1.4.text.unlikely._ZN4node7commons16CheckMemoryLimitEv.rel.text._ZN4node7commons16CheckMemoryLimitEv.text.unlikely._ZN4node6GetCPUExPd.rel.text._ZN4node6GetCPUExPd.text.unlikely._ZN4node7commons11GetCPUUsageExx.rel.text._ZN4node7commons11GetCPUUsageExx.text.unlikely._ZN4node7commons13CheckCPUUsageEx.rel.text._ZN4node7commons13CheckCPUUsageEx.text.unlikely._ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E.rel.text._ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E.text.unlikely._ZNSt3mapIliSt4lessIlESaISt4pairIKliEEED2Ev.rel.text._ZNSt3mapIliSt4lessIlESaISt4pairIKliEEED2Ev.text.unlikely._ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1_.text.unlikely._ZN4node12InitThreadIdEib.rel.text._ZN4node12InitThreadIdEib.text.unlikely._ZN4node17CreateNewThreadIdEv.rel.text._ZN4node17CreateNewThreadIdEv.text.unlikely._ZN4node7commons20getAvailableThreadIdEb.rel.text._ZN4node7commons20getAvailableThreadIdEb.text.unlikely._ZN4node10setCommonsEPNS_7commonsE.rel.text._ZN4node10setCommonsEPNS_7commonsE.text.unlikely._ZN4node7commons14setMainIsolateEv.rel.text._ZN4node7commons14setMainIsolateEv.text.unlikely._ZN4node7commons11newInstanceEi.rel.text._ZN4node7commons11newInstanceEi.text.unlikely._GLOBAL__sub_I_commons.cc.rel.text.startup._GLOBAL__sub_I_commons.cc.rel.init_array.bss._ZZN4node7commons13CheckCPUUsageExE4last.bss._ZZN4node7commons13CheckCPUUsageExE7counter.bss._ZZN4node7commons11GetCPUUsageExxE4last.bss._ZZN4node7commons11GetCPUUsageExxE7counter.bss._ZZN4node7commons11GetCPUUsageExxE6before.rodata._ZZN4node6GetCPUExPdE19__PRETTY_FUNCTION__.rodata._ZZN4node10setCommonsEPNS_7commonsEE19__PRETTY_FUNCTION__.bss._ZN4nodeL7comLockE.bss._ZN4nodeL8isolatesE.bss._ZN4nodeL4comsE.bss._ZN4nodeL20main_thread_created_E.bss._ZN4nodeL20jxcore_multithreadedE.bss._ZN4node7commons15threadIdCounterE.data._ZN4node7commons20self_hosted_process_E.data._ZN4node7commons10riThreadIdE.bss._ZN4node7commons24embedded_multithreading_E.bss._ZN4node7commons7mapDataE.bss._ZN4node7commons15threadPoolCountE.data._ZN4node7commons9maxMemoryE.bss._ZN4node7commons16globalModulePathE.data._ZN4node7commons18allowMonitoringAPIE.data._ZN4node7commons14maxCPUIntervalE.data._ZN4node7commons6maxCPUE.data._ZN4node7commons23allowLocalNativeModulesE.data._ZN4node7commons12allowSysExecE.data._ZN4node7commons5bTCPSE.data._ZN4node7commons4bTCPE.bss._ZN4node7commons8mapCountE.bss._ZN4node7commons15max_header_sizeE.bss._ZN4node7commons15process_status_E.bss._ZN4node7commons16embedded_source_E.bss._ZN4node7commons16ssl_initialized_E.bss._ZN4node7commons18processExitInvokedE.bss._ZN4node7commons17processExitResultE.bss._ZStL8__ioinit.rodata.cst8.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    =Q "#%&()+,./124578:;=>@ACDFGIJLMOPRSUVXY[\^_abdefhid&klno 8qrtuwxz{}~a0 '.4 9@EH%O+S1W7[=dC}IOU[agmsy !'5<CI[el ~!'-39?EKQW]ci"o/u6{CTdrydPdda DZp}g  -b}W-jz ;/!6 K)#jxo&R),%X2EN5~X8;> -A= Y Dx  G  J &MC i P /S   V Y, ;\U y  6_  b f  / 5 iI S ] 3l~ o M"r M"u/ M"u[ "x  {HS~f"&EBer,Ojcommons.cc_ZN4nodeL4comsE_ZN4nodeL20jxcore_multithreadedE_ZN4nodeL8isolatesE_ZN4nodeL7comLockE_ZZN4node6GetCPUExPdE19__PRETTY_FUNCTION___ZZN4node7commons11GetCPUUsageExxE6before_ZZN4node7commons11GetCPUUsageExxE7counter_ZZN4node7commons11GetCPUUsageExxE4last_ZZN4node7commons13CheckCPUUsageExE7counter_ZZN4node7commons13CheckCPUUsageExE4last_ZN4nodeL20main_thread_created_E_ZZN4node10setCommonsEPNS_7commonsEE19__PRETTY_FUNCTION___GLOBAL__sub_I_commons.cc_ZStL8__ioinit.LC2.LC3.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC23.LC24.LC25.LC26.LC27.LC28.LC29.LC30.LC31.LC32.LC33.LC34.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC43.LC44.LC45.LC46.LC47.LC48.LC49.LC50.LC51.LC52.LC53.LC54.LC55.LC56.LC57.LC58.LC59.LC60.LC61.LC62.LC63.LC64.LC65.LC66.LC67.LC68.LC69.LC70.LC71.LC72.LC73.LC74.LC75.LC76.LC77.LC78.LC108.LC109.LC111.LC114.LC112.LC113.LC117.LC125.LC129_ZNSt3mapIliSt4lessIlESaISt4pairIKliEEED5Ev_ZN4node7commons25threadIdFromThreadPrivateEv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_pthread_self_ZN4node7commons13getThreadLoopEv_ZN2v87Isolate10GetCurrentEv_ZN4node7commons9stringOPSEb_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN4node7commons7DisposeEvuv_loop_delete_ZN4node7commons10setProcessEN2v86HandleINS1_6ObjectEEE_ZN4node7commonsD2Ev_ZdlPvclear_aresfree_ZN4node7commonsD1Ev_ZN4node13removeCommonsEvuv_mutex_lock_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_uv_mutex_unlock_ZN4node7commonsC2Eiuv_multithreaded_Znwjuv_setThreadKeyIduv_loop_newuv_setThreadLoop_ZN4node7commons12TriggerDummyEP10uv_async_siuv_async_inituv_default_loop_ZN2v87Isolate3NewEv_ZN4node7commonsC1Ei_ZN4node7commons10PingThreadEvuv_async_send_ZN4node7commons18getCurrentThreadIdEv_ZN4node7commons11getInstanceEv_ZN4node7commons21getInstanceByThreadIdEi__x86.get_pc_thunk.cx_ZN4node10ThreadWrap13EmitOnMessageEi_ZN4node7commons11CleanPingerEiuv_close_ZN4node7commons14getInstanceIsoEPN2v87IsolateE_ZN4node7commons17SetPortBoundariesEiib_ZN4node7commons4bTCPE_ZN4node7commons5bTCPSE_ZN4node7commons14GetTCPBoundaryEv_ZN4node7commons15GetTCPSBoundaryEv_ZN4node7commons12SetMaxMemoryEx_ZN4node7commons9maxMemoryE_ZN4node7commons10SetSysExecEi_ZN4node7commons12allowSysExecE_ZN4node7commons26SetAllowLocalNativeModulesEi_ZN4node7commons23allowLocalNativeModulesE_ZN4node7commons23AllowLocalNativeModulesEv_ZN4node7commons16SetMonitoringAPIEb_ZN4node7commons18allowMonitoringAPIE_ZN4node7commons18AllowMonitoringAPIEv_ZN4node7commons9SetMaxCPUEii_ZN4node7commons6maxCPUE_ZN4node7commons14maxCPUIntervalE_ZN4node7commons9GetMaxCPUEv_ZN4node7commons17GetMaxCPUIntervalEv_ZN4node7commons19SetGlobalModulePathESs_ZN4node7commons16globalModulePathE_ZNSs6assignERKSs_ZN4node7commons19GetGlobalModulePathEv_ZNSsC1ERKSs_ZN4node7commons10CanSysExecEv_ZN4node7commons16CheckMemoryLimitEvuv_resident_set_memory__android_log_printabort_ZN4node6GetCPUExPdgetrusage__assert2_ZN4node7commons11GetCPUUsageExx_ZN4node7commons13CheckCPUUsageEx_ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZNSt3mapIliSt4lessIlESaISt4pairIKliEEED2Ev_ZNSt3mapIliSt4lessIlESaISt4pairIKliEEED1Ev_ZNSt8_Rb_treeIlSt4pairIKliESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZN4node12InitThreadIdEib_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__ZN4node17CreateNewThreadIdEv_ZN4node7commons15threadIdCounterE_ZN4node7commons20getAvailableThreadIdEb_ZN4node7commons24embedded_multithreading_Euv_createThreadKeyuv_mutex_init_ZN4node10setCommonsEPNS_7commonsE_ZN4node7commons14setMainIsolateEv_ZN4node7commons11newInstanceEi__dso_handle_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZNSsC1EPKcRKSaIcE_ZNSsD1Ev_ZN4node7commons20self_hosted_process_E_ZN4node7commons10riThreadIdE_ZN4node7commons7mapDataE_ZN4node7commons15threadPoolCountE_ZN4node7commons8mapCountE_ZN4node7commons15max_header_sizeE_ZN4node7commons15process_status_E_ZN4node7commons16embedded_source_E_ZN4node7commons16ssl_initialized_E_ZN4node7commons18processExitInvokedE_ZN4node7commons17processExitResultE  w! w  y v5A v ?[w;Ws7So3Ok/Kg+Gc 'C_{#?[w;Ws    % @ T ` {       , @ L g {       , 8 S g s       $ ? S _ z       + ? K f z      +7 Rfr   # >R^ y   *>J ey   *6 Qeq   " =Q] x   )=I dx   )5 Pdp   ! <P\ w    (<H cw   (4 Oco     ;O[ v    ';G bv   '3 Nb| #C_{#?[w9Qi +=Q -;IWep{  u&, w: wk v w  # y)   \ n          +Qq   y%+ w5 w  y v-9 v  v %0 "?  v @     $ & ( ( + + .(/ . / 304 3&6 & $09 :; A=w s >  r rL rV r` qf ql qr q p p< q q p<% r- r .( o-13 oC nP n`< o n< :; /A: /A: E 0 wA w u wE  ;GD wR uZj w~ w wD w w  u%I<FD  y#) w7 wc xtK y xLH x x uMLK % u-@FM v^w t > N  .6N  Q%R+S;TA3O [UaVqT{ w w wC w w wTj T 0XH!#%')(+<-P/t13579;=?A@ChE|HJMLRVXZ4\d^`cfhDjp4 A@ L DX`h!h'h,hmpai @( g @0 2G =9 @@ `  @\!`!W @(8!`!\ @p{"" @Ppb#p# @  )=))9 @h#b* *o @0&**R @0)"*_*[ @,++; @ /L+7P+X3 @ 2]++ @85++X  @P 8?(,u0,q @p;D,P, @>d,3p,-/ @AZ,, @D,, @ЏG(,g,c @J,-& @M&-6 0-2 @Pc J- P-/ @0 S - - @PV -D -@ @hYp - -; @ \ - .6 @ _D 6.v @.r @b 2\. z/ / @ؐ@f ;04 @00 @HiN <1 @13~ @`l t2 2 @o ^3| `3M x @x r 3$3M  @ uV44 @x14^4Z @В{~66S @p8~47@7  @>C8tP8p @8X88& @9/ 9B+ @(Ub9p9~ @Д8: @p@:@:@:F@:v@:@:& :0 :2:@K:`:::::&:W;@v;;;; ;=;\;;; ;$;$;6$;^$;$;$;$;$;(;&8;B<;^0@;(gh;{h;w @xpBZ  pCjob.o/ 1560953066 501 20 100644 3888 ` ELF 4(nullUWVSd$䍓D$4t$0D‹T$8$T$4$|$4$4$D$lj4$4$4$tx td$[^_]Ðt&uxu$USd$܋D$4D$D$0D$D$$d$$[]UW1VSd$ԋD$@t$3v;|$@t'D$4$D$tٍd$,[^_]Íd$,1[^_]UVSd$4$t$D$$d$[^]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,AB C AAA F L6AB ApA 8pcAB ADL AAA A GAAA $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.text.unlikely._ZN6jxcore11SendMessageEiPKcib.rel.text._ZN6jxcore11SendMessageEiPKcib.text.unlikely._ZN6jxcore12CreateThreadEPFvPvES0_.rel.text._ZN6jxcore12CreateThreadEPFvPvES0_.text.unlikely._ZN6jxcore15CreateInstancesEi.rel.text._ZN6jxcore15CreateInstancesEi.text.unlikely._GLOBAL__sub_I_job.cc.rel.text.startup._GLOBAL__sub_I_job.cc.rel.init_array.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    F-2Qg}/6 Rcc job.cc_GLOBAL__sub_I_job.cc_ZStL8__ioinit.LC0_ZN6jxcore11SendMessageEiPKcib__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__Z6cpystrPKci_Z10threadLocki_Z15pushThreadQueueiPcthreadHasMessagesetThreadMessage_Z12threadUnlocki_ZN4node7commons21getInstanceByThreadIdEi_ZN4node7commons10PingThreadEv_ZN6jxcore12CreateThreadEPFvPvES0_uv_thread_create_ZN6jxcore15CreateInstancesEi_ZN6jxcore10JXInstance9runScriptEPv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit  4>JRdl t!" +$  3&G$  '( (2):* P t  4<!<'<,2<;AmPi @ X6 @  6"@c @  FoFk @@ 8 @x 0((( @ (  jx_instance.o/ 1560953067 501 20 100644 18680 ` ELF@4(41,nullcompilercallBackrefWaitCountersetThreadOnHoldtools../src/jx/jx_instance.ccJS_IS_FUNCTION(func_value)JS_IS_FUNCTION(runner_value)UWVƍES$t$UE~%D$u|$4$ME|$EA4$D$E|$D$4$EED$ D$ED$E$M|$A4$D$E|$D$4$EED$ D$ED$E$MybD$ A |$4$D$E|$}D$4$EED$ D$ED$E$E<$E4$E4$D$ED$ED$ D$E4$D$U<$UUT$uD$4$U4$UUD$ D$$T$4$<$E$e[^_]ÍE$e[^_]Ðt&4$E$v<$4$Et^$‹Hy@ uXD$ D$$D$ t&D$<$ctJXInstance::Callback expects a string argument{"threadId":%d , "resetMe":true, "counter":%d}j->script != NULL && "Something is wrong job->script shouldn't be null!"UWVuSd$4$} 4$$xO|}čT$D$ D$<$Eă<$D$Eă<$D$Eă4$D$M4$Ee[^_]fEĉ$Uă1t$뵐t&GR@@BẺ$EG~`G}ĉD$ED$$EUЉ$UUD$D$ $T$E$<$F}ĉ<$EăUWVuSd$ĉ4$4$$NjE @uRMԉ $Uԃ1t $D$4$M4$Ee[^_]fEԉ$Uԃ1t $D$4$}뵍t&E @$iE @~ E Mԋ@$MMЉG\CMԉ $MEԃMUWVuSd$ĉ4$4$$NjE @uRMԉ $Uԃ1t $D$4$M4$Ee[^_]fEԉ$Uԃ1t $D$4$}뵍t&E @$iE @~8E Mԋ@$MG`M@GX$M-vMԉ $MEԃMUWVuSd$ԋE4$D$ D$D$E4$D$E 4$D$D$}E|$D$ D$E$e[^_]UWVS$4$ 8t$ e[^_]Ðt&$Ɖ`$hD$ǍE$\PƉD$E$L4$E$dGXFTt4$t4$D$ D$D$t$pp4$D$t$p4$D$ptEXD$$D$$$D$$4$t $lD$D$D$D$l$D$D$l$D$D$l$T4$1D$ T$D$lXD$ D$t $D$hD$$t $$ <$hH4$hD$D$L$ $w\<$p$d$P$L$W$p`$pu&\$e[^_]É4$1[`t$dD$ D$@4$D$D !%tD$ $DJDdD$)‰T$Nt&PƉD$E$L4$E$dFXTUWVSd$ԋD$DL$@pB‰A$L$@I)4ljD$9sf$G9wL$@D$AA QVQ$vAD$DqQ Ad$,[^_]UWVS$4XE$`ThXxAD$E$EEEEEEEEEElEM؋UE+EE+ME+UEЉD$E$EEEEEEPEUԋ}ЉLEdu\E䉅pE)ыU+Uщʉ)хpLf9 y9Npu݋E}ԋUt,p9v'$9wU$E tD$P$E\E9E$h.t&l$hxbE9ED$|$4$t|$pE4$D$t|$D$4$hhD$ D$tD$p$E$MhEQ9E8-h@2D$D$ |$4$t|$D$4$ddD$ D$tD$p$pEl$4$t4$D$\t`L$D$ D$4$D$l$l$lD$$vEu}t?9s0$9wE$T$e[^_]ÍEh$Xt&E$EPU@EEUt&\QI\vdAIdjhdpcD$D$ D$$UWEVSd$$u E<$$EyEtNEĉ$Uă1t $D$E$ME$Ee[^_]VeFUĉU$E~FD$E$}ă<$}ȃ~FD$E$uă4$MủL$ȃƒU1EЍEȉEẺE$EEEExuXDЉ$EEUD$E$EME $<$ExtED$D$E$EăefEĉ$EEă&t$8uEtPE1E0&E$EăQfE$EăqED$ED$OD$D$ D$$D$D$ D$$UVSd$4$t$D$$d$[^]void jxcore::handleTasks(node::commons*, const v8::Handle&, const v8::Handle&, int)static v8::Handle jxcore::JXInstance::Compiler(const v8::Arguments&)$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| <eAB BFS AAA G O AAA F ,\AB BD AAA E ,!AB BD AAA E ,9AB BD AAA E ,AB BDAAA <AB Cy AAA F  AAA A (\AG CAAA 0AB AD AAA G ,AB EC AAA D $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.text.unlikely._ZN6jxcoreL9handleJobEPN4node7commonsEPNS_3JobERKN2v86HandleINS5_8FunctionEEE.rel.text._ZN6jxcoreL9handleJobEPN4node7commonsEPNS_3JobERKN2v86HandleINS5_8FunctionEEE.rodata.str1.4.text.unlikely._ZN6jxcore10JXInstance8CallBackERKN2v89ArgumentsE.rel.text._ZN6jxcore10JXInstance8CallBackERKN2v89ArgumentsE.text.unlikely._ZN6jxcore10JXInstance14refWaitCounterERKN2v89ArgumentsE.rel.text._ZN6jxcore10JXInstance14refWaitCounterERKN2v89ArgumentsE.text.unlikely._ZN6jxcore10JXInstance15setThreadOnHoldERKN2v89ArgumentsE.rel.text._ZN6jxcore10JXInstance15setThreadOnHoldERKN2v89ArgumentsE.text.unlikely._ZN4node9SetMethodIN2v85LocalINS1_6ObjectEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE.rel.text._ZN4node9SetMethodIN2v85LocalINS1_6ObjectEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE.text.unlikely._ZN6jxcore10JXInstance9runScriptEPv.rel.text._ZN6jxcore10JXInstance9runScriptEPv.text.unlikely._ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj.rel.text._ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj.text.unlikely._ZN6jxcoreL11handleTasksEPN4node7commonsERKN2v86HandleINS3_8FunctionEEES8_i.rel.text._ZN6jxcoreL11handleTasksEPN4node7commonsERKN2v86HandleINS3_8FunctionEEES8_i.text.unlikely._ZN6jxcore10JXInstance8CompilerERKN2v89ArgumentsE.rel.text._ZN6jxcore10JXInstance8CompilerERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_jx_instance.cc.rel.text.startup._GLOBAL__sub_I_jx_instance.cc.rel.init_array.rodata._ZZN6jxcoreL11handleTasksEPN4node7commonsERKN2v86HandleINS3_8FunctionEEES8_iE19__PRETTY_FUNCTION__.rodata._ZZN6jxcore10JXInstance8CompilerERKN2v89ArgumentsEE19__PRETTY_FUNCTION__.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group e    ^p)!" P*$%VF%t+')*+,./ &60 ` <Up-, *L>[Ss :j#!\t9"T-Pb  7       ( "Z z      : P f x      & / "_ e l       4 M e r  jx_instance.cc_ZN6jxcoreL9handleJobEPN4node7commonsEPNS_3JobERKN2v86HandleINS5_8FunctionEEE_ZN6jxcoreL11handleTasksEPN4node7commonsERKN2v86HandleINS3_8FunctionEEES8_i_ZZN6jxcoreL11handleTasksEPN4node7commonsERKN2v86HandleINS3_8FunctionEEES8_iE19__PRETTY_FUNCTION___ZZN6jxcore10JXInstance8CompilerERKN2v89ArgumentsEE19__PRETTY_FUNCTION___GLOBAL__sub_I_jx_instance.cc_ZStL8__ioinit.LC0.LC2.LC7.LC8.LC9.LC10.LC11.LC12.LC15.LC16.LC18.LC19__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v85Array3NewEPNS_7IsolateEi_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v88TryCatchC1Ev_ZN2v87Context10GetCurrentEv_ZN2v87Context6GlobalEv_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZNK2v88TryCatch9HasCaughtEv_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEv_ZN6jxcore11SendMessageEiPKcib_ZN6jxcore8JXStringD1Ev_ZN2v88TryCatchD1Ev_ZN2v811HandleScopeD1Ev_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZNK2v88TryCatch11CanContinueEv_ZN2v87Isolate10GetCurrentEv_ZN4node15ReportExceptionERN2v88TryCatchEb_ZN6jxcore10JXInstance8CallBackERKN2v89ArgumentsE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore10JXInstance14refWaitCounterERKN2v89ArgumentsE_ZNK2v85Value7IsInt32Ev_ZNK2v85Value12IntegerValueEv_ZN6jxcore10JXInstance15setThreadOnHoldERKN2v89ArgumentsE_ZN4node10ThreadWrap13EmitOnMessageEi_ZN4node9SetMethodIN2v85LocalINS1_6ObjectEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN6jxcore10JXInstance9runScriptEPv_Z10customLocki_ZN4node7commons15process_status_E_Z12customUnlocki_ZN6jxcore3Job14getNewThreadIdEv_ZN6jxcore3Job9fillTasksEi_ZN4node7commons11newInstanceEi_ZN6jxcore8JXEngineC1EPN4node7commonsE_ZN2v86LockerC1EPNS_7IsolateE_ZN2v87Isolate5EnterEv_ZN2v814ObjectTemplate3NewEv_ZN2v87Context3NewEPNS_22ExtensionConfigurationENS_6HandleINS_14ObjectTemplateEEENS3_INS_5ValueEEE_ZN2v87Context5EnterEv_ZN14v8_typed_array14AttachBindingsEN2v86HandleINS0_6ObjectEEEuv_idle_inituv_check_inituv_unref_ZN2v86Object3NewEv_ZN6jxcore10JXInstance8CompilerERKN2v89ArgumentsE_ZN4node18SetupProcessObjectEib_ZN6jxcore8JXEngine22InitializeProxyMethodsEPN4node7commonsE_ZN4node4LoadEN2v86HandleINS0_6ObjectEEE_ZN4node7commons11CleanPingerEiuv_run_jx_ZN4node9RunAtExitEv_ZN4node7commons7DisposeEv_ZN2v87Context4ExitEv_ZN2v87Isolate4ExitEv_ZN2v86LockerD1Ev_ZN2v87Isolate7DisposeEv_ZN4node13removeCommonsEv_Z17reduceThreadCountv_ZN6jxcore3Job12removeTaskerEi_ZN6jxcore8JXEngineD1Ev_ZN4node8EmitExitEN2v86HandleINS0_6ObjectEEEsnprintf_ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj_Znwj_ZdlPv_ZN6jxcore3Job8getTasksEPSt5queueIiSt5dequeIiSaIiEEEi_ZN6jxcore17getTaskDefinitionEi__assert2_ZNK2v85Value8ToObjectEv_ZNK2v85Value10IsFunctionEv_ZN6jxcore6getJobEi_ZN6jxcore16decreaseJobCountEv_ZN6jxcore3Job7DisposeEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit 8 9':V;u<<=<< =5>U<y=?@ABCDE;FCGKHVIoIJKLJK (F1MLN 8 9:'P/QR )j>|RSTIJKU9VJEiFtGJ 8 9:$P,QNJdKpT}IJKTXYJ 8 9:$P,QNJdKpT}IJKTXY[*J 8 93]E^b_=8 9 a&b7cIdYelfghi:j k#l5AFmXAnopnqr *\O  +\#W- ,?\EZO -a\m .>=sKctu v1wCxKyYzgIu{|}~ /kFyMhi:M 8 9;k 8 93:6BHr;<<=bH>k<=?@ABC&LDNIFMp 0z " 1 8 9$:,P4QQJgKvTIY ]<J.bgJJ 2 # 1 3 # 18 9 $( 2: `   `%4 2\@ 2L28T!T'T,2T;e @(92 2XD@ @8:2 |! @:x2T9P @H;2    @;02q   @;2z  @> 2K=@  @ >2A = @8?2"yF @@@82%( @x@2'@p@QP@0(<<$ @@X2/``"0 38 + job_store.o/ 1560953069 501 20 100644 35260 ` ELF4v4(}z,-/0235689>?ABDEJKMNPQST`acdtuUWVSd$ԋ@PD$l$(D$p$xt(9sf$9wD$$D$;ud$,[^_]UVSd$$$pd$[^]UVSd$$$pd$[^]UWVSd$ċt$PV $T$T$D$9s't$Ǎv'$9wt$D$8$(;t$$,|$,D$$|$@PP @@PD$|$$@P@@P PD$|$$d$l[^_]Í&t$Vvt$&t$Fvt$ $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (tAB CjAAA H$\EAB B}AA $EAB B}AA <AC AAOP_ AA AAH ,AB Cg AAA H ,AB C{ AAA D 0L<AA AO fA AA<AA AAOP AC AAH (AG CAAA (MAB CCAAA (MAB CCAAA (DAB CAAA ,pAB C AAA D (AB CAAA (AG CAAA TAA AAO@V CA AAC I AC AAC ,P|AB C AAA C TAA AAO@V CA AAC I AC AAC <AB C5 AAA B  AAA A <AA AAO@P AA AAA ,XAB Ce AAA B <AB CW AAA H  AAA B ,#AB C{ AAA D <AC AAO@k AA AAD L8AB C AAA A m AAA H D AAA A ,AB C AAA B @JAA AAR AA AAA @ AC AAO AA AAH @T.symtab.strtab.shstrtab.text.data.bss.text.unlikely.__tcf_0.rel.text.__tcf_0.text.unlikely._ZN6jxcore11getJobCountEv.rel.text._ZN6jxcore11getJobCountEv.text.unlikely._ZN6jxcore16increaseJobCountEv.rel.text._ZN6jxcore16increaseJobCountEv.text.unlikely._ZN6jxcore16decreaseJobCountEv.rel.text._ZN6jxcore16decreaseJobCountEv.text.unlikely._ZN6jxcore9addNewJobEiPNS_3JobE.rel.text._ZN6jxcore9addNewJobEiPNS_3JobE.text.unlikely._ZN6jxcore6getJobEi.rel.text._ZN6jxcore6getJobEi.text.unlikely._ZN6jxcore3Job12removeTaskerEi.rel.text._ZN6jxcore3Job12removeTaskerEi.text.unlikely._ZN6jxcore3Job7DisposeEv.rel.text._ZN6jxcore3Job7DisposeEv.text.unlikely._ZSt4copyIiESt15_Deque_iteratorIT_RS1_PS1_ES0_IS1_RKS1_PS5_ES8_S4_.rel.text._ZSt4copyIiESt15_Deque_iteratorIT_RS1_PS1_ES0_IS1_RKS1_PS5_ES8_S4_.text.unlikely._ZNSt11_Deque_baseIPN6jxcore3JobESaIS2_EE17_M_initialize_mapEj.rel.text._ZNSt11_Deque_baseIPN6jxcore3JobESaIS2_EE17_M_initialize_mapEj.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E.text.unlikely._ZNSt3mapIiPN6jxcore3JobESt4lessIiESaISt4pairIKiS2_EEED2Ev.rel.text._ZNSt3mapIiPN6jxcore3JobESt4lessIiESaISt4pairIKiS2_EEED2Ev.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E.rel.text._ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E.text.unlikely._ZN6jxcore3Job13removeTaskersEv.rel.text._ZN6jxcore3Job13removeTaskersEv.text.unlikely._ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEED2Ev.rel.text._ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEED2Ev.text.unlikely._ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj.rel.text._ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1_.text.unlikely._ZN6jxcore17getTaskDefinitionEi.rel.text._ZN6jxcore17getTaskDefinitionEi.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE24_M_get_insert_unique_posERS1_.text.unlikely._ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEEixERS8_.rel.text._ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEEixERS8_.text.unlikely._ZNSt5dequeIiSaIiEE17_M_reallocate_mapEjb.rel.text._ZNSt5dequeIiSaIiEE17_M_reallocate_mapEjb.text.unlikely._ZNSt5dequeIiSaIiEE16_M_push_back_auxERKi.rel.text._ZNSt5dequeIiSaIiEE16_M_push_back_auxERKi.text.unlikely._ZN6jxcore3JobC2EPKciS2_iiib.rel.text._ZN6jxcore3JobC2EPKciS2_iiib.text.unlikely._ZN6jxcore3Job8getTasksEPSt5queueIiSt5dequeIiSaIiEEEi.rel.text._ZN6jxcore3Job8getTasksEPSt5queueIiSt5dequeIiSaIiEEEi.text.unlikely._ZN6jxcore3Job9fillTasksEi.rel.text._ZN6jxcore3Job9fillTasksEi.rodata.str1.4.text.unlikely._ZNSt5dequeIiSaIiEE13_M_insert_auxISt15_Deque_iteratorIiRKiPS4_EEEvS3_IiRiPiET_SB_j.rel.text._ZNSt5dequeIiSaIiEE13_M_insert_auxISt15_Deque_iteratorIiRKiPS4_EEEvS3_IiRiPiET_SB_j.text.unlikely._ZNSt5dequeIiSaIiEEaSERKS1_.rel.text._ZNSt5dequeIiSaIiEEaSERKS1_.text.unlikely._ZN6jxcore3Job14getNewThreadIdEv.rel.text._ZN6jxcore3Job14getNewThreadIdEv.text.unlikely._GLOBAL__sub_I_job_store.cc.rel.text.startup._GLOBAL__sub_I_job_store.cc.rel.init_array.bss._ZN6jxcore14threadTaskListE.bss._ZN6jxcore15taskDefinitionsE.bss._ZN6jxcoreL3opsE.bss._ZN6jxcore10jobs_queueE.bss._ZN6jxcoreL4jobsE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.grouptr !(p#$&')*,-/0235689;<>?ABDEGHJKMNPQSTVWYZ\]_`acdfgij9 jUslnopqrstuwxd_j _pv     u Pq7>XtnEE!$)'Hkn<*"-%"0dM"3M"6M"6J"9<o4"?|"?"B"Eb|H"Ko"N"Q"TW+9WV#Z]"a "d5 JgV j    job_store.cc__tcf_0_ZN6jxcoreL4jobsE_ZN6jxcoreL3opsE_GLOBAL__sub_I_job_store.cc_ZStL8__ioinit.LC25.LC26_ZNSt3mapIiPN6jxcore3JobESt4lessIiESaISt4pairIKiS2_EEED5Ev_ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEED5Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN6jxcore10jobs_queueE_ZdlPv_ZN6jxcore11getJobCountEv__x86.get_pc_thunk.cx_ZN6jxcore16increaseJobCountEv_Z10customLocki_Z12customUnlocki_ZN6jxcore16decreaseJobCountEv_ZN6jxcore9addNewJobEiPNS_3JobE_Znwjmemmove_ZSt17__throw_bad_allocv_ZN6jxcore6getJobEi_ZN6jxcore3Job12removeTaskerEi_ZN4node7commons15process_status_E_ZN6jxcore14threadTaskListE_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS__ZN6jxcore3Job7DisposeEvfree_ZSt4copyIiESt15_Deque_iteratorIT_RS1_PS1_ES0_IS1_RKS1_PS5_ES8_S4__ZNSt11_Deque_baseIPN6jxcore3JobESaIS2_EE17_M_initialize_mapEj_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E_ZNSt3mapIiPN6jxcore3JobESt4lessIiESaISt4pairIKiS2_EEED2Ev_ZNSt3mapIiPN6jxcore3JobESt4lessIiESaISt4pairIKiS2_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E_ZN6jxcore3Job13removeTaskersEv_ZN6jxcore15taskDefinitionsE_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base_ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEED2Ev_ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEED1Ev_ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEj_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore3JobEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZN6jxcore17getTaskDefinitionEi_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__ZNSt8_Rb_treeIiSt4pairIKiSt5queueIiSt5dequeIiSaIiEEEESt10_Select1stIS7_ESt4lessIiESaIS7_EE24_M_get_insert_unique_posERS1__ZNSt3mapIiSt5queueIiSt5dequeIiSaIiEEESt4lessIiESaISt4pairIKiS4_EEEixERS8__ZNSt5dequeIiSaIiEE17_M_reallocate_mapEjb_ZNSt5dequeIiSaIiEE16_M_push_back_auxERKi_ZN6jxcore3JobC2EPKciS2_iiib_Z6cpystrPKci_ZN6jxcore3JobC1EPKciS2_iiib_ZN6jxcore3Job8getTasksEPSt5queueIiSt5dequeIiSaIiEEEi_ZN6jxcore3Job9fillTasksEi_ZNSt5dequeIiSaIiEE13_M_insert_auxISt15_Deque_iteratorIiRKiPS4_EEEvS3_IiRiPiET_SB_j_ZSt20__throw_length_errorPKc_ZNSt5dequeIiSaIiEEaSERKS1__ZN6jxcore3Job14getNewThreadIdEv_Z14getThreadCountv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexite fgIh[hegj f Je fl" J2 J7me fl" J2 J7me f$l*g[ Hlmpgg\gpgg hqqqqre f l& H<gbmhe f!l'u8mJvWvwvwhhhve f)ye fq e f;pkpe f/|:he f/|:he f3ih|hhe fv J' H4 HIvQhhhvv yEQ|\hhntghhe f/ihzhh e f;pkpe fe fvpEe fe fM[p0 ihxhhhhhe fqp&hqqre f5pe fslv/Ovp #mAOee f!l'u8mJvZ{vvvhe fl#u8mJvKhe fzz" zq z p pq P Qe fozhzppc Q Pe fv0@lFumv:hJhnh~hm e f K) 7?Eg{:{ hh4 HNv~vB L `  PH!t#%')T+-/1\3579<<>@BDLXM4 {z@ {{L {|X {Rd {p {S| { { { { { { { {{j{e!',Gt C @l0{Ut~ @l{E @l0{+E' @m0{P5@ @Dm{!.0 @m8{$  @ nh{'Am<i @tn{*<@ @n{-+< }@ y @n {0 E M A @n {3N  ` M  @n {6J   @o0{9]b    @4o{<x   @o0{?_   @,p {BYU @Lp{E | @dp8{H& , 0 @p{K5   @p{N !  @CDFGJKMNPQSTVWYZ\]_`bcefhiklnotuuƁUSd$쀻uPl$$$$$d$[]USd$쀻ul$$d$[]USd$쀻ul$$d$[]USd$쀻ul$$d$[]USd$쀻ul$$d$[]UVSd$t!l$4$4$ƃd$[^]D$node != root()../src/jx/btree.hleaf() == x->leaf()parent()->is_root()parent() == src->parent()src->count() >= count()to_move >= 1to_move <= src->count()parent() == dest->parent()count() >= dest->count()to_move <= count()child(i + 1)->count() == 0position >= node->count()position < node->count()dest->count() == 0count() >= 1i <= count()position <= -1position >= 0iter.node->leaf()iter.node == root()UW1VSd$ċt$T>D$PT$$N9~ދD$P;04tn~t$T1D$  9}>P;T$t닋HD$T H9|Ðt$TD$P;0l4$l$Hd$<[^_]Ív~t⋋F1L$V 9}‹J;L$t狫jɍT$/l$H $T$D$D$뫍vHqɉpDl$D$/D$l$H$D$Tl$H6~t$T1D$  9}-P;T$t닳t9H~6D$THɋD$P0jl$jT$+HqpƉl$D$/D$l$H$D$Tl$Htl$HD$ D$D$;$UWV1Sd$ċl$T}l$HD$PT$$O9~ڋD$P;84txl$T1D$ v9}FP;T$t닫HD$TH9|É'l$TD$P;(f,$l$Hd$<[^_]Ív}t⋃}1D$E9}‹P;T$t狋Hȅɉl$D$/D$l$H$l$뫍vHiɉhrL@ @@@D$d@9rL@ @@@D$d@9rL@ @@@D$d@9rL@ @@@D$d@9RrL@ @@@D$d@9L@ J@@@D$d@9M r L@ @@@D$d@9r L@ @@@D$d@9}g L@ @@@D$d@9}0L@ @@@D$d@W9N t$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9Lt$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9`t$dLB BBBP O9ML$du tB BBBP O9L$d tB BBBW9t@ @@@WA9LЉT$,D$dO|$`pDD$(&l$l$$l$X $L$L$l$$A qyD$EQAET$T$AEAEAD$u}UE;L$(uD$d|$`@o9}xt$dT|$`tL$ f9}FJ;L$t닻BD$d@9|É'|$`o9~lD$vG9}ZEP;T$t拋HȅȍD$?l$$l$X$D$l$$G9|?l$,UD$d9L$d9t$dMooootEoot o(o(((9t| T$dP9T$,|M T$d9D$,|"D$dD$dt$dppGpGpGpG pG~upG~cpG~QpG~?pG ~- pG ~$pG ~ (pxD$d@1xD$dPxD$dPxD$dPxD$dP xD$dPxD$dPxD$dP~qxD$dP~YxD$dP ~A xD$dP ~)$xD$dP ~(xD$d@WGD$dPd$L[^_]Ðt&D$d@wvHL$$HD$$fBxzTl$$D$?D$l$X $D$dl$$@t$dt$,T$dT$dL$d    _>     $ $$$((((|t&D$d@Ml$XD$ D$D$$UWVSd$ċD$Pxt d$<[^_]À8L$9A@8L$AD$P(}}1L$t&E9}jP;T$t狋1Hȅɉl$D$/D$l$H$l$뫍v$l$HD$Pd$<[^_]ÐD$P(,$l$HD$PL$d$<[^_]Ívt$l$HD$4$~tvD$1xʼnL$&E9}JP;T$t狋tuHȅ͉l$D$/D$l$H$l$믍&D$Pl$HL$;tqD$$N&HL$HD$fHL$HD$넍l$HD$ D$D$G$D$;D$ D$$position() + 1 == src->position()i + to_move <= src->max_count()position() + 1 == dest->position()node->parent()->child(node->position()) == nodechild(count() + i + 1) != NULLnode->count() == node->max_count()node->max_count() - node->count() == to_movenode->count() < node->max_count()*mutable_rightmost() == parent->child(0)!compare_keys(tmp_iter.key(), iter.key())UWVSd$|$dD$`t$hW9PD$`W@9tD$`W@9291ҋl$`I EЃL@ 9@@@uˋD$`@D$`@LD$`T$`L$,@L$l,$l$l$Xl$L$,UET$UD$E T$$QD$ D$UQUQ U QUT$AD$ QT$$A DQLD$`L$,@D$`@L$l,$l$l$Xl$L$,UET$UD$E T$$QD$ D$UQUQ U QUT$AD$ QT$$A QOt$hΉ|$d D$`l$X|$`L$ @t$ȍ|<$nGWonD$G onL$ T$o nWo|$l$FV~n;L$hu|$dt$hG9ot$L|$dt$hL$,$l$ l$XL$,l$ D$L$,E u}D$ AUEAT$$T$$EAEAED$ QqAD$dyT$@9||$dt$ht$hf9L$h|gG)ȍDP;tߋqhÍD$?l$X$D$L$L$9L$h}&'D$`t$h8T$`l$`RJhHUJhHhUJhHEUJhH"UJ hHU JhHUJhHUJhHU J hHtwU J hHtXU J $hHt9U $J (hHtU(J ,hHG9xHG9|g1 fo 9|SAyDŽO)9}ɋT$`B(Gd$L[^_]Ít&hupl$XD$ D$D$#$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$UWVSd$|$dD$`9xD$`|$d@W9D$`PD$d@9l$h9T$h1ҋt$dO |$hvFЃL@ 9@@@uˋD$d@x|$|$dD$hlLl$ AD$E$l$XL$,l$ l$L$,Eu}D$ AU EAT$$T$$EAEA E D$ qyAD$Q uD$`l$X|$d@D$`@tD$ht$D|<$NGWOND$G ON T$l$O NWO|$F D$`nl$XV~@|$`+D$htGGt$|<$NGWOND$G ON T$l$O NWO|$F D$`Vn~@|$`+D$hDP;-D$d|$hD$HfD$D$;D$hD$`t$`L$,@L$+D$hD$l,$l$ l$Xl$ L$,E u}D$ AUEAT$$T$$EA E AED$ yQA D$`q|$`@+D$hD$DP;E7p%D$?l$X$D$L$ L$ t&D$`8D$dL$h|$dpxHFǂ* D$hBFzǁ D$hBFzǁ D$hBFzǁ D$hBFzǁj D$hBFzǁ: D$hBFzǁ  D$hBFzǁ D$hBFzǁ D$hBFzǁt~ D$hBFzǁtR D$h zBǁt&t$h񉄏xHǂD$ht$`xV|$|$d&+T$hHTt"yF9tQd$[^_]Í&AV98uv8tAd$[^_]ÍvF8u1V9u>'Q@h9uh}t1yd$[^_]ÐP;tˍl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$$$~$P$Pҋ$$@)ЈF'$~o$D$HD$$#t&$D$|$@9D$$$AA@ A AGL$L$0D$l,$l$(l$xl$(L$0Uu}T$,QE UQD$(D$(UQ U QUT$,qyQ$A BD$DP;T$$#pD$Ll$x$D$L$(L$(f$@$l$xD$PFD$$D$TD$XD$\@ D$LFD$4Ƌ$@D$8@9<|$8t$Lt$<t$4F$D$PF D$TFD$XFD$\FGD$9D$4gLil$l$ $l$0l$xL$(L$(iqA iiyQiiAD$i iq9D$4yil$0QuD$8xD$8WP8l$49t$8W9 Hi4G9ʼnQLt$8W9Ս4A+t$8G94Q t$8W94At$8G94Qt$8W94At$8G9ō4Qt$8W9Ս4A}it$8G9ō4Q}Lt$8W9Ս4A}/G|$89ō4Q} BD$8DŽD$Ll$xP;T$$$$@$@t$@t$|<$NGWOND$G ON T$l$O NWO|$F $Vn~@$DP;T$$$$P@JF$N8ug@$?$1$vT=TBJV|=Dy9~ȍd$l[^_]Í&$V9t1$P$Pt&xwp%$1@t{HD$<$D$t?p$D$KD$|$|$$pNHHqpD$}D$ D$$l$xD$ D$D$]$D$D$ D$$l$xD$ D$D$k$UWVSd$t$dAD$:AD$`y;iPD$$@T$D$ 9+D$9V҃T$(|$(N9F~D$l$XD$D$$L$$D$Qy)9~)Dž~ A8AD$-D$ D$$T$;T$ r&GD$9D$:G:9l$Xua$,@@ @xVD$D$T$$D$VI9~ )ʃVd$L[^_]Í$@@ @xVD$D$T$$D$`D$:9u,uPD$(@T$ D$$9)1҃~ƒT$,|$,OD$)9F~D$ ;D$$D$(l$XT$ $D$FQ9~)ЃFD$(PA9D$GD$ D$$t&,9v9l$X$4NjD$`@GG ,GG@0D$`@xD$`89,l$]&1 |$$W>DFl$XD$ D$D$$D$[D$ D$$D$&D$ D$$UWVSd$L$01>tryF8uAV9tvP;Q@uh}t։1y'd$[^_]Í&A8u)P8t@Ad$[^_]Íl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$D$hD$$8D$d8 D$/0D$hhD$$8t$$UxF9|$$MƋPG9UƋHG9dMƋPG9AUƋHG9MƋPG9UƋHG9MƋPG9U ƋHG9M ƋPG9}sU ƋHG9}TM ƋPG9}5U ƋHG9} PGT$$DŽD$hD$/hD$$@t$$F9=t$$DL ml$ AL$l$X$L$(L$L$iq܋yi܋iAQiiAD$$iiqyiQl$ @9|D$(P;sD$hl$XT$h|$dRD$8;T$<HPt$d|$hfB9@"|$4$:t OT$8L$::insert_value(int, const value_type&) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree_node::value_type = std::pair, ttlTimer>]void btree::btree_node::split(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree::rebalance_or_split(btree::btree::iterator*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::iterator = btree::btree_iterator, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >, std::pair, ttlTimer>&, std::pair, ttlTimer>*>; typename Params::pointer = std::pair, ttlTimer>*; typename Params::reference = std::pair, ttlTimer>&]btree::btree::iterator btree::btree::internal_insert(btree::btree::iterator, const value_type&) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::iterator = btree::btree_iterator, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >, std::pair, ttlTimer>&, std::pair, ttlTimer>*>; typename Params::pointer = std::pair, ttlTimer>*; typename Params::reference = std::pair, ttlTimer>&; btree::btree::value_type = std::pair, ttlTimer>]void btree::btree_iterator::increment_slow() [with Node = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >; Reference = std::pair, ttlTimer>&; Pointer = std::pair, ttlTimer>*]void btree::btree_node::rebalance_left_to_right(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::rebalance_right_to_left(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::merge(btree::btree_node*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::swap(btree::btree_node*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::make_root() [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::remove_value(int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_iterator::decrement_slow() [with Node = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >; Reference = std::pair, ttlTimer>&; Pointer = std::pair, ttlTimer>*]btree::btree::iterator btree::btree::erase(btree::btree::iterator) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::iterator = btree::btree_iterator, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >, std::pair, ttlTimer>&, std::pair, ttlTimer>*>; typename Params::pointer = std::pair, ttlTimer>*; typename Params::reference = std::pair, ttlTimer>&]void btree::btree::delete_internal_node(btree::btree::node_type*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::node_type = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >]void btree::btree::delete_internal_node(btree::btree::node_type*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::node_type = btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >] $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (0qAA O ] AA(\3AA O _ AA(3AA O _ AA(3AA O _ AA(3AA O _ AA0 DAA AO nA AA@Th|<zAC CAOP AA AAD TAA ACOP AA AAD  AA AAA $(AB BAA <P AA AAO`+ AA AAF h[AA AAOPP AA AAA  AA AAB ` AA AAD <AA AAO` AA AAE <<AA AAO` AA AAB <|AC AAO` AA AAF <AC AAOP AA AAD lAA AAO@ AA AAA V CA AAD e AF AAB hl_AA AAO0a AA AAH x AA AAD B AA AAB @AA AAO AA AAH <AA AAO` AA AAG T\oAA AAO0q AA AAH P AA AAA <HAA AAO` AA AAC T+AA AAOP AA AAH  FA AAC TL-AA AAOp AA AAD  AA AAI ,yAB AElAAA <AB C\ AAA C  AAA H T AA AAOp  AA AAE  AA AAG <lAAB C\ AAA C  AAA H $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN6XSpace9StoreInitEv.rel.text._ZN6XSpace9StoreInitEv.text.unlikely._ZN6XSpace9INITSTOREEv.rel.text._ZN6XSpace9INITSTOREEv.text.unlikely._ZN6XSpace9LOCKSTOREEv.rel.text._ZN6XSpace9LOCKSTOREEv.text.unlikely._ZN6XSpace11UNLOCKSTOREEv.rel.text._ZN6XSpace11UNLOCKSTOREEv.text.unlikely._ZN6XSpace10LOCKTIMERSEv.rel.text._ZN6XSpace10LOCKTIMERSEv.text.unlikely._ZN6XSpace12UNLOCKTIMERSEv.rel.text._ZN6XSpace12UNLOCKTIMERSEv.text.unlikely._ZN6XSpace12DESTROYSTOREEv.rel.text._ZN6XSpace12DESTROYSTOREEv.text.unlikely._ZN6XSpace5StoreEv.rel.text._ZN6XSpace5StoreEv.text.unlikely._ZN6XSpace6TimersEv.rel.text._ZN6XSpace6TimersEv.text.unlikely._ZN6XSpace9SetHasKeyEb.rel.text._ZN6XSpace9SetHasKeyEb.text.unlikely._ZN6XSpace9GetHasKeyEv.rel.text._ZN6XSpace9GetHasKeyEv.rodata.str1.1.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE14internal_clearEPNS_10btree_nodeIS9_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE14internal_clearEPNS_10btree_nodeIS9_EE.text.unlikely._ZN6XSpace10ClearStoreEv.rel.text._ZN6XSpace10ClearStoreEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv.rodata.str1.4.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT_.rel.text._ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT_.text.unlikely._ZNK5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEEET_RS6_SI_.rel.text._ZNK5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEEET_RS6_SI_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6_.text.unlikely._ZN6XSpace16ExpirationRemoveEPKc.rel.text._ZN6XSpace16ExpirationRemoveEPKc.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T_.text.unlikely._ZN6XSpace14ExpirationKickEPKc.rel.text._ZN6XSpace14ExpirationKickEPKc.text.unlikely._GLOBAL__sub_I_memory_store.cc.rel.text.startup._GLOBAL__sub_I_memory_store.cc.rel.init_array.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12insert_valueEiRKS7_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EERKS7_E19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeIS9_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeISA_EEE19__PRETTY_FUNCTION__.bss._ZL6hasKey.bss._ZL7exiting.bss._ZL10store_init.bss._ZL10TimerStore.bss._ZL11StringStore.bss._ZL12ortimerLocks.bss._ZL12orstoreLocks.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group!-?P`!"$%'(*+-.0134r679:;}=>'@ACDFGDIJKMN[PQqSTVWYZ\][_` bccef hiklnoqrtuwxz{m F{ } 9 9 !9 59 $I 9 {9 c9 I I9 9 DI 9 9 9 hI 9 9 I 59 U9 H9 I% I+ 0I1 I7 b9= q9C 9I \IO 9     U l   q    3  3" ( 3%A 3(\ D+w . 1 4 7 z";Y {    ">+ AD "D  ["G#"K"N"Q"T "W_"Z>"]"`Xo"cH"fz+"i0-"ly"oKrl "u.AxMWo| memory_store.cc_ZL10store_init_ZL7exiting_ZL12orstoreLocks_ZL11StringStore_ZL10TimerStore_ZL12ortimerLocks_ZL6hasKey_ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeISA_EEE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeIS9_EEE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_E19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_E19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEvE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12insert_valueEiRKS7_E19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EERKS7_E19__PRETTY_FUNCTION___GLOBAL__sub_I_memory_store.cc_ZStL8__ioinit.LC11.LC12.LC16.LC18.LC25.LC24.LC23.LC22.LC21.LC20.LC29.LC28.LC30.LC27.LC32.LC37.LC36.LC38.LC43.LC40.LC42.LC41.LC47.LC45.LC48.LC46.LC50.LC51.LC53.LC54.LC60_ZN6XSpace9StoreInitEv__x86.get_pc_thunk.cx_GLOBAL_OFFSET_TABLE__ZN6XSpace9INITSTOREEv__x86.get_pc_thunk.bxuv_mutex_init_Znwj_ZN6XSpace9LOCKSTOREEvuv_mutex_lock_ZN6XSpace11UNLOCKSTOREEvuv_mutex_unlock_ZN6XSpace10LOCKTIMERSEv_ZN6XSpace12UNLOCKTIMERSEv_ZN6XSpace12DESTROYSTOREEv_ZN6XSpace5StoreEv_ZN6XSpace6TimersEv_ZN6XSpace9SetHasKeyEb_ZN6XSpace9GetHasKeyEv_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE_ZNSs4_Rep20_S_empty_rep_storageE_ZdlPv_ZNSs4_Rep10_M_destroyERKSaIcE__assert2_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE14internal_clearEPNS_10btree_nodeIS9_EE_ZN6XSpace10ClearStoreEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA__ZNSs4swapERSs_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i_ZNSsC1ERKSs_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEmemcmp_ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT__ZNK5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEEET_RS6_SI__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6__ZN6XSpace16ExpirationRemoveEPKc_ZNSsC1EPKcRKSaIcE_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T__ZN6XSpace14ExpirationKickEPKcuv_hrtime_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitpthread_create  s s  r w(4G uLX t^ vf  r w(  r w(  r v(  r v(  s w)2 r8 u t  q  q  Vt+[7N }\ pf ~v Zz;kLX }f op ~  u-9 tKW umu{ t u t s < 4g   j ~  l0Bs  k ~-; }E oO ~W hx(ks  h ~(. < hF ~V\ j ht ~  h ~  h ~  h ~ r!Ye  g ~$* 8 gB ~RX f gp ~  g ~  g ~ F,x / 9 iC ~KQ _ li ~y  i ~ )cCs } o ~  f ~  f ~-3 A fK ~[ K & c0 ~8> L cV ~ft ~ b ~  c ~   d  ~_  d ~% ( d2 ~BP Z dd ~lz  d ~ m ~ # m- ~=C Q m[ ~k V/Ts  n ~  n ~ * l4 ~D $ D$  =e  q)/ tU[ t# D]en: s  @   e ~  b ~   q)/ tZ` t.@dm tCNw  x( 2:^ 4 `DXl!$',*T,/3@69=?pAD H`KNQPSUWYp\^yz;$4 ;$@ ;$L ;$X ;$d ;$p ;$| ;$ ;$ ;$ ;$ ;$ ;$ ;$ ;$ ;$ ;$ ;$ ;$ ;$!',V R @ s>@q @X3 @P(.3* @x("N4z@3v @(%t3 @((D @8+7]Y @(.v"0 @@1BP @X4f(p$ @p7E2T(@z  @;  @>D P  @A g c @(xDP[L @G2<] Y @@K#r $ n @PN +s + o @XQ 4v 4r @ pT 6 6 @0Wa Z8`8_ @pZ99  @0]A<A8 @ `*F@Fo  @ pcGGH @fZMN+  @X0i,P@P-  @PlHnUpUy @ o9UmUi @hrWVW R @`u bb=pbA9 @PxbeeF @ 8{f @X}@f[@dg@i @@l@qp@q@s@Y@t@@u@j@v@@w@ @x@0!z@!@}@"@@9#YI#YZ#Yo#\#\#\#\#\#\#`$0d($1$-$ @`B$ȭ` (jxp_compress.o/ 1560953073 501 20 100644 106584 ` ELFn4(>;56UWVƍrSd$D$;F(nHND^~0D$D$<$|$T$D$f*׃|$l$jR Չl$ l$kVRND ЉFHvB<$;~4sWV0FH~0VDFHJNDwى<$l$T$+ډT$#,ND FHv6<$';~4sWV0FH~0VDFHJNDwى<$l$ |$ ++l$2VND ‰T$VHv9<$&;~4sGF0VH~0FDVHHNDwىT$<$|$T$l$ #,ND l$nHv8<$t&';~4sWV0FH~0VDFHJNDwى<$T$l$;V(<$RщND FHN4vG9sWV0~0N4FHVDFHVDw19d$ [^_]Í&jl$VRND ЉFH;<$&';~4sWV0FH~0VDFHJNDwt&l$UT$UT$t&++l$~0USd$D$$$d$[]USd$D$(D$$$d$[]U!WV$21ɨt ftD$D$ &1tft11D$1ɉT$ 1l$t$t$ tN|$ t$l$ T$frt$T$l$|$ ,lt4lt$ t$D$ D$9|$ D$8rtNt$QT$ft$ƄltƄ4lL$:D$T$ tN|$ L$l$t$ T$fMl$JT$,lt lt$ t$vt$Ѓ1D$ D$fVt$9|$ 4lvt$T$ |$t$҉k4lfMt4m։l$ $D$D$$l$ MD EHy}DEHv<U0;U4sJM0EHMDyEH}Dw׋T$(OMD ЉEHv.&U0;U4s JM0EH}DEHOMDwًT$$MD ЉEHvBU0;U4s JM0EH}DEHOMDwٺ=RuEHMDv6 U0;U4s JM0EHMDEHMDwىt$ 1҉RMD EHEHvD}0;}4sOM0EHMDEHMDwك9ut$ $kD$ D$t$t$ 9t$MDD$ xD$48uҌ5R EHʃщUDEHv6'U0;U4sJM0EHMDQщEHUDw׃|$ 9|$w$[^_]ÃD$ 1ɋt$ t$L$ f2t$D$Ƅ4lVƄlv f4t$D$Ƅ4l4m&t$T$ f2t$D$Ƅ4l4mt$1D$ f6t$D$Ƅ4lVƄlt$T$ f2t$D$Ƅ4lN llt&f6 t$D$Ƅ4l4mƄ4lftƄ4mt&|$u6|$D$,D$D$(+$),|$yPD$09D$t$9t$$=D$@D$|$T$,+$)$fo@@@P@`@pfo 0fo@, @0 ǀ ǀ ǀ ǀ ǀ ǀ ǀ ǀ ƀPƀQ@ƀRƀSƀTƀUƀVƀWƀXƀYƀZƀ[ƀ\ƀ]ƀ^pƀ_$L$#)D$D t$ Q$AхxD$D t$ Q$PFxrD$LiƠ D$D$ D$\$D$XiΉD$HD$XL$DL@L$WύB1 u L$W f |$D=wFl$\ )͋$fA`ŁvD$DD$D;D$L8$ |$Pt$P$p]$T$Hfff9ƀ$UWVSd$$$'ut$,t |$,1ɋ+uL$|$L$M vK 1x=1ׁT}rfMrfr|$W|$t$H|$4D$HD$D$D0tA$t6l$+$D$$D$El$x$l$E$M E\$l$l$xl$DD$\$E`uYl$rD$l$xD$$l$D$D$rl$x$l$E$fl$l$xl$Eld$l[^_]ÐD$8DD$,uuD$Dg^D$@U(}PETD$,EL1D D$D$TL$@D$4l$,T$(E}nT$XL$\|$`l$d½D$@T$P~8t~t1$[^_]f$ҋ$D$hL$hD$lT$luƋ$tf|$Ht $ t|$P w~t%D$lI|$\w$Et$lM}1Ҩt ft$T$T@D$PQcD$D$1D$$@($$P 6t$WtvfW$,$l$0$D$P(t$$l$09tt$mWtvfW$L$l$@D$$D$0Ƌ$L$DP(E$$T$<Ƌl$@L$DjD$(;ED$(E tL$@vQ.WtvfW$$L$,$(l$X$$D$L$\t$HD$DƋl$XL$\iD$(;ETD$(T$H,$D$D$Dl$0$D$l$04D$(T$<,$D$D$0l$@$D$l$@UWVS$4$t V8t~t1$[^_]Ít&FD$8=w>Jn|$(L$ l$,D$$|$ l$$w|$(l$,n ~L$l$$|$D$ F4L$0T$8$V0L$0T$89a|$ Fl$$L$?>D$8|$0n>|$(l$4nD$(|$@L$`L$p|$P$$6|$0l$4Ƅ$Ƅ$D$pD$`D$PD$@D$(D$?D$ $7L$ 1D$ L$8T$ T$4l$ ň$$$D$?D$T$$D$@$Ƅ$P$D$PƄ$KƄ$$D$`Ƅ$$$D$($D$p$$$$$D$0D$F4$V0T$ B0t$FVyfD$ $UVSd$t$ t"N8tT$$tD$(t 9F0t 1d$[^]f4$l$tF8T$$L$(@4F8@8F8@4F8@<@8UWVSd$t$0t-~8t&FtN tFP1vd$[^_]fd$1[^_]Ðt&F8l$(D$F($ыGGGG D$F($V G GGGGD$F($V G0G G$G(G,t$G09F0t#|$F($V Fd$[^_]ÐG4t։D$F($V G4UWVSd$ԍt$@|$DF0v4|$D$4$t;|$HD$HBud$,[^_]ÍN8|$D$F(T$L$$VL$T$A4tF8xAB AxA $`AB FTAA 4 AA AI ] A AAD $\AB FPAA ,PAB BC AAA A PLAA AAR  CA AAE GFA AAPAA AAO@ AA AAC DCA AAPAA AAO@ AA AAC DCA AA(HRAD FDAA HtAA AD@ A AAE 3 A AAA DAF CD,T A AGA WF AAHwAA AAe C AAB AC AA T&AB A`A x4AAA AD m C AAA 9AK kA .AB AhA , %AB C AAA F <.AB AhA 4`AAA AD m C AAA @(AA AAR AA AAA l4AA AAO AC AAD  AA AAH  FA AAC 8`AI CJ AAA F OAAA <AF ACC CAA F JAAA  AB AA @zAC AARVI AA AAC pDAA AAO7 AA AAB  AF AAA 2 AA AAA NAB AHA <=AF AAO0 CA AAB $ oAB A` A C D X |l AA AAOp  AA AAA N FA AAA D FA AAC DCA AAT AA AAO0b CA AAE D CC AAD 0D AB B~ AA C GAA 4x AA O@b  AAC D CA< AF b AF A FA I FA < NAB C AAA H J AAA C 0 NAB AHA DT AI CU AAA C n AAA G WAAA  FAB A@A T AC AAOx AA AAA } CA AAA  VAB APA < $P DA[ D Y G C,x _A[ D g I C E Fl AA AAOo AA AAB  AF AAF D CA AAF T AC CCR[r FA AAA I AA AAC 0p AA p AE W DE T AA AAOp& AA AAC D AA AAH @ dAA AD l C AAH \A AA(@|AB CrAAA  lVAB APA  VAB APA lVAA AAOPP CA AAG r AC AAH D CA AAF <$AB CT AAA C W CAA D Td"AC AAR[@ FA AAG A AA AAC (lAB CbAAA ,AB CB AAA E dAA AAO0i AA AAH D CA AAF AF AAdAA AAO@b CC AAC @ FC AAE LCA AAdAA AAO0S CC AAB X FC AAE LCA AATPAB BC AAA B L CAA G N CAA E SAAA (dAB CZAAA <{AA AAO0] AA AAD T%AA AAO@_ CA AAH  CC AAA <lh AA AARs AA AAC nAB AhA @ AA AARk CA AAA 4]AA AGO C AAB <LAA AARa AA AAE 4AA AO p A AAC hEAA AAO0n AA AAC D CA AAF  AF AAB <0AB CX AAA G z CAA A 8pAB C AAA H MAAA <AB CN AAA A ~ CAA E <AH AARR CA AAC P,AA AAOp CA AAG DCA AA,AB C AAA E ,tAB BDgAAA ,AB AGs AAA G 4yAA O P  AAE N AA,HtAB F AAA A <xAB Cu AAA B R CAA A $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely.tdefl_compress_lz_codes.rel.text.tdefl_compress_lz_codes.text.unlikely.def_free_func.rel.text.def_free_func.text.unlikely.def_alloc_func.rel.text.def_alloc_func.text.unlikely.tdefl_optimize_huffman_table.text.tdefl_optimize_huffman_table.text.unlikely.tdefl_start_static_block.rel.text.tdefl_start_static_block.rodata.str1.1.text.unlikely.tdefl_start_dynamic_block.rel.text.tdefl_start_dynamic_block.text.unlikely.tdefl_flush_output_buffer.text.tdefl_flush_output_buffer.text.unlikely.mz_zip_mem_read_func.text.mz_zip_mem_read_func.text.unlikely.mz_zip_heap_write_func.text.mz_zip_heap_write_func.text.unlikely.tdefl_output_buffer_putter.rel.text.tdefl_output_buffer_putter.text.unlikely.def_realloc_func.rel.text.def_realloc_func.text.unlikely.mz_zip_file_write_callback.rel.text.mz_zip_file_write_callback.text.unlikely.mz_zip_array_ensure_capacity.isra.1.text.unlikely.mz_zip_reader_read_central_dir.rel.text.mz_zip_reader_read_central_dir.text.unlikely.mz_zip_writer_add_put_buf_callback.text.mz_zip_writer_add_put_buf_callback.text.unlikely.mz_zip_reader_init_internal.isra.6.part.7.rel.text.mz_zip_reader_init_internal.isra.6.part.7.text.unlikely.mz_zip_writer_write_zeros.isra.8.rel.text.mz_zip_writer_write_zeros.isra.8.text.unlikely.mz_zip_file_read_func.rel.text.mz_zip_file_read_func.text.unlikely.mz_zip_file_write_func.rel.text.mz_zip_file_write_func.rel.text.unlikely.mz_zip_writer_add_to_central_dir.constprop.18.text.unlikely.tdefl_flush_block.rel.text.tdefl_flush_block.text.unlikely.mz_adler32.text.mz_adler32.text.unlikely.mz_crc32.rel.text.mz_crc32.text.unlikely.mz_free.rel.text.mz_free.text.unlikely.mz_version.rel.text.mz_version.text.unlikely.mz_deflateEnd.text.mz_deflateEnd.text.unlikely.mz_deflateBound.text.mz_deflateBound.text.unlikely.mz_compressBound.rel.text.mz_compressBound.text.unlikely.mz_inflateInit2.rel.text.mz_inflateInit2.text.unlikely.mz_inflateInit.rel.text.mz_inflateInit.text.unlikely.mz_inflateEnd.text.mz_inflateEnd.text.unlikely.mz_error.rel.text.mz_error.text.unlikely.tinfl_decompress.rel.text.tinfl_decompress.rel.rodata.tinfl_decompress.text.unlikely.mz_inflate.rel.text.mz_inflate.text.unlikely.mz_uncompress.rel.text.mz_uncompress.text.unlikely.tinfl_decompress_mem_to_heap.rel.text.tinfl_decompress_mem_to_heap.text.unlikely.tinfl_decompress_mem_to_mem.rel.text.tinfl_decompress_mem_to_mem.text.unlikely.tinfl_decompress_mem_to_callback.rel.text.tinfl_decompress_mem_to_callback.text.unlikely.tdefl_compress.rel.text.tdefl_compress.text.unlikely.tdefl_compress_buffer.rel.text.tdefl_compress_buffer.text.unlikely.tdefl_init.rel.text.tdefl_init.text.unlikely.mz_deflateReset.rel.text.mz_deflateReset.text.unlikely.tdefl_get_prev_return_status.text.tdefl_get_prev_return_status.text.unlikely.tdefl_get_adler32.text.tdefl_get_adler32.text.unlikely.mz_deflate.rel.text.mz_deflate.text.unlikely.tdefl_compress_mem_to_output.rel.text.tdefl_compress_mem_to_output.text.unlikely.tdefl_compress_mem_to_heap.rel.text.tdefl_compress_mem_to_heap.text.unlikely.tdefl_compress_mem_to_mem.rel.text.tdefl_compress_mem_to_mem.text.unlikely.tdefl_create_comp_flags_from_zip_params.rel.text.tdefl_create_comp_flags_from_zip_params.text.unlikely.mz_deflateInit2.rel.text.mz_deflateInit2.text.unlikely.mz_deflateInit.rel.text.mz_deflateInit.text.unlikely.mz_compress2.rel.text.mz_compress2.text.unlikely.mz_compress.rel.text.mz_compress.rodata.text.unlikely.tdefl_write_image_to_png_file_in_memory_ex.rel.text.tdefl_write_image_to_png_file_in_memory_ex.text.unlikely.tdefl_write_image_to_png_file_in_memory.rel.text.tdefl_write_image_to_png_file_in_memory.text.unlikely.mz_zip_reader_get_num_files.text.mz_zip_reader_get_num_files.text.unlikely.mz_zip_reader_is_file_encrypted.text.mz_zip_reader_is_file_encrypted.text.unlikely.mz_zip_reader_is_file_a_directory.text.mz_zip_reader_is_file_a_directory.text.unlikely.mz_zip_reader_file_stat.rel.text.mz_zip_reader_file_stat.text.unlikely.mz_zip_reader_extract_to_mem_no_alloc.part.13.rel.text.mz_zip_reader_extract_to_mem_no_alloc.part.13.text.unlikely.mz_zip_reader_get_filename.text.mz_zip_reader_get_filename.text.unlikely.mz_zip_reader_locate_file.rel.text.mz_zip_reader_locate_file.text.unlikely.mz_zip_reader_extract_to_mem_no_alloc.rel.text.mz_zip_reader_extract_to_mem_no_alloc.text.unlikely.mz_zip_reader_extract_file_to_mem_no_alloc.rel.text.mz_zip_reader_extract_file_to_mem_no_alloc.text.unlikely.mz_zip_reader_extract_to_mem.rel.text.mz_zip_reader_extract_to_mem.text.unlikely.mz_zip_reader_extract_file_to_mem.rel.text.mz_zip_reader_extract_file_to_mem.text.unlikely.mz_zip_reader_extract_to_heap.rel.text.mz_zip_reader_extract_to_heap.text.unlikely.mz_zip_reader_extract_file_to_heap.rel.text.mz_zip_reader_extract_file_to_heap.text.unlikely.mz_zip_reader_extract_to_callback.rel.text.mz_zip_reader_extract_to_callback.text.unlikely.mz_zip_reader_extract_file_to_callback.rel.text.mz_zip_reader_extract_file_to_callback.text.unlikely.mz_zip_reader_extract_to_file.rel.text.mz_zip_reader_extract_to_file.text.unlikely.mz_zip_reader_end.rel.text.mz_zip_reader_end.text.unlikely.mz_zip_reader_init.rel.text.mz_zip_reader_init.text.unlikely.mz_zip_reader_init_mem.rel.text.mz_zip_reader_init_mem.text.unlikely.mz_zip_reader_init_file.rel.text.mz_zip_reader_init_file.text.unlikely.mz_zip_reader_extract_file_to_file.rel.text.mz_zip_reader_extract_file_to_file.text.unlikely.mz_zip_writer_init.rel.text.mz_zip_writer_init.text.unlikely.mz_zip_writer_init_from_reader.rel.text.mz_zip_writer_init_from_reader.text.unlikely.mz_zip_writer_add_mem_ex.rel.text.mz_zip_writer_add_mem_ex.text.unlikely.mz_zip_writer_add_mem.rel.text.mz_zip_writer_add_mem.text.unlikely.mz_zip_writer_add_file.rel.text.mz_zip_writer_add_file.text.unlikely.mz_zip_writer_add_from_zip_reader.rel.text.mz_zip_writer_add_from_zip_reader.text.unlikely.mz_zip_writer_finalize_archive.rel.text.mz_zip_writer_finalize_archive.text.unlikely.mz_zip_writer_finalize_heap_archive.rel.text.mz_zip_writer_finalize_heap_archive.text.unlikely.mz_zip_writer_end.rel.text.mz_zip_writer_end.text.unlikely.mz_zip_writer_init_heap.rel.text.mz_zip_writer_init_heap.text.unlikely.mz_zip_writer_init_file.part.15.rel.text.mz_zip_writer_init_file.part.15.text.unlikely.mz_zip_writer_init_file.rel.text.mz_zip_writer_init_file.text.unlikely.mz_zip_add_mem_to_archive_file_in_place.rel.text.mz_zip_add_mem_to_archive_file_in_place.text.unlikely.mz_zip_extract_archive_file_to_heap.rel.text.mz_zip_extract_archive_file_to_heap.text.unlikely._ZN6jxcore14CompressStringEPN4node7commonsEPKcl.rel.text._ZN6jxcore14CompressStringEPN4node7commonsEPKcl.text.unlikely._ZN6jxcore14CompressStringEPN4node7commonsEPN2v86HandleINS3_5ValueEEE.rel.text._ZN6jxcore14CompressStringEPN4node7commonsEPN2v86HandleINS3_5ValueEEE.text.unlikely._ZN6jxcore10RaiseCacheEm.rel.text._ZN6jxcore10RaiseCacheEm.text.unlikely._ZN6jxcore11RemoveCacheEv.rel.text._ZN6jxcore11RemoveCacheEv.text.unlikely._ZN6jxcore16UncompressStringEPN4node7commonsEN2v86HandleINS3_6ObjectEEEm.rel.text._ZN6jxcore16UncompressStringEPN4node7commonsEN2v86HandleINS3_6ObjectEEEm.text.unlikely._ZN6jxcore16UncompressNativeEPN4node7commonsEPKcm.rel.text._ZN6jxcore16UncompressNativeEPN4node7commonsEPKcm.text.unlikely._GLOBAL__sub_I_jxp_compress.cc.rel.text.startup._GLOBAL__sub_I_jxp_compress.cc.rel.init_array.rodata._ZZ42tdefl_write_image_to_png_file_in_memory_exE5chans.rodata._ZZ42tdefl_write_image_to_png_file_in_memory_exE22s_tdefl_png_num_probes.rodata._ZZ16tinfl_decompressE11s_dist_base.rodata._ZZ16tinfl_decompressE12s_dist_extra.rodata._ZZ16tinfl_decompressE13s_length_base.rodata._ZZ16tinfl_decompressE14s_length_extra.rodata._ZZ16tinfl_decompressE17s_length_dezigzag.rodata._ZZ16tinfl_decompressE17s_min_table_sizes.rel.data.rel.ro.local._ZZ8mz_errorE13s_error_descs.rodata._ZZ8mz_crc32E7s_crc32.rodata._ZL18s_tdefl_num_probes.rodata._ZL11mz_bitmasks.rodata._ZL24s_tdefl_large_dist_extra.rodata._ZL22s_tdefl_large_dist_sym.rodata._ZL24s_tdefl_small_dist_extra.rodata._ZL22s_tdefl_small_dist_sym.rodata._ZL17s_tdefl_len_extra.rodata._ZL15s_tdefl_len_sym.bss._ZN6jxcoreL11cache_size_E.bss._ZN6jxcoreL15compress_cache_E.rodata._ZL37s_tdefl_packed_code_size_syms_swizzle.bss._ZStL8__ioinit.rodata.cst16.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group)D):/O.f-,+*  &   + _ - G2r!"3"$%>%'`'()# )+,B\,-.eP.0113446779R9;< <>?@A@'CDFGIJKLMNPQSTVWXY3P%[\^P u|"|! $#`acdfgijlmoprsuvxy{|}~:,(R,     0:1XFw3 !"#$%'()*+,-./01234568o\944 4 ,\\&\\O\\x\n \L \\@\G \) \ \ \\# \*( \1\8\?)\F\M\T\[\b \i \p-\w` \~( \ \ \\76 ?wA&&D.G95OAJ]9Lm.N~%Q.TAWY(\4adgjzm8pGNs]=vhoyx|~ , N< NK X Fd  V  D _ - 4 O i p w d | V V V% H "j l         d9 {L %k s h    n   ]   9 EK c {     $t j  2yLt4jxp_compress.cctdefl_compress_lz_codes_ZL11mz_bitmasks_ZL15s_tdefl_len_sym_ZL17s_tdefl_len_extra_ZL22s_tdefl_small_dist_sym_ZL24s_tdefl_small_dist_extra_ZL22s_tdefl_large_dist_sym_ZL24s_tdefl_large_dist_extradef_free_funcdef_alloc_functdefl_optimize_huffman_tabletdefl_start_static_blocktdefl_start_dynamic_block_ZL37s_tdefl_packed_code_size_syms_swizzletdefl_flush_output_buffermz_zip_mem_read_funcmz_zip_heap_write_functdefl_output_buffer_putterdef_realloc_funcmz_zip_file_write_callbackmz_zip_array_ensure_capacity.isra.1mz_zip_reader_read_central_dirmz_zip_writer_add_put_buf_callbackmz_zip_reader_init_internal.isra.6.part.7mz_zip_writer_write_zeros.isra.8mz_zip_file_read_funcmz_zip_file_write_funcmz_zip_writer_add_to_central_dir.constprop.18tdefl_flush_block_ZZ8mz_crc32E7s_crc32_ZZ8mz_errorE13s_error_descs_ZZ16tinfl_decompressE12s_dist_extra_ZZ16tinfl_decompressE11s_dist_base_ZZ16tinfl_decompressE14s_length_extra_ZZ16tinfl_decompressE13s_length_base_ZZ16tinfl_decompressE17s_min_table_sizes_ZZ16tinfl_decompressE17s_length_dezigzag_ZL18s_tdefl_num_probes_ZZ42tdefl_write_image_to_png_file_in_memory_exE22s_tdefl_png_num_probes_ZZ42tdefl_write_image_to_png_file_in_memory_exE5chansmz_zip_reader_extract_to_mem_no_alloc.part.13mz_zip_writer_init_file.part.15_ZN6jxcoreL11cache_size_E_ZN6jxcoreL15compress_cache_E_GLOBAL__sub_I_jxp_compress.cc_ZStL8__ioinit.L1451.LC4.LC5.LC6.LC8.LC28.LC37.LC38.L1189.L1191.L1192.L1193.L1194.L1195.L1196.L1452.L1453.L1199.L1200.L1201.L1454.L1203.L1455.L1205.L1456.L1207.L1208.L1209.L1210.L1457.L1458.L1459.L1460.L1461.L1462.L1463.L1218.L1219.L1220.L1464.L1465.LC78.LC83.LC87__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_freemallocreallocfwritememsetftello64fseeko64freadmz_adler32mz_crc32mz_freemz_version__x86.get_pc_thunk.cxmz_deflateEndmz_deflateBoundmz_compressBoundmz_inflateInit2mz_inflateInitmz_inflateEndmz_errortinfl_decompressmz_inflatemz_uncompresstinfl_decompress_mem_to_heaptinfl_decompress_mem_to_memtinfl_decompress_mem_to_callbacktdefl_compresstdefl_compress_buffertdefl_initmz_deflateResettdefl_get_prev_return_statustdefl_get_adler32mz_deflatetdefl_compress_mem_to_outputtdefl_compress_mem_to_heaptdefl_compress_mem_to_memtdefl_create_comp_flags_from_zip_paramsmz_deflateInit2mz_deflateInitmz_compress2mz_compresstdefl_write_image_to_png_file_in_memory_extdefl_write_image_to_png_file_in_memorymz_zip_reader_get_num_filesmz_zip_reader_is_file_encryptedmz_zip_reader_is_file_a_directorymz_zip_reader_file_statmktimemz_zip_reader_get_filenamemz_zip_reader_locate_filestrlenmemcmpmz_zip_reader_extract_to_mem_no_allocmz_zip_reader_extract_file_to_mem_no_allocmz_zip_reader_extract_to_memmz_zip_reader_extract_file_to_memmz_zip_reader_extract_to_heapmz_zip_reader_extract_file_to_heapmz_zip_reader_extract_to_callbackmz_zip_reader_extract_file_to_callbackmz_zip_reader_extract_to_filefopenfcloseutimemz_zip_reader_endmz_zip_reader_initmz_zip_reader_init_memmz_zip_reader_init_filemz_zip_reader_extract_file_to_filemz_zip_writer_initmz_zip_writer_init_from_readerfreopenmz_zip_writer_add_mem_extimelocaltimemz_zip_writer_add_memmz_zip_writer_add_filestatmz_zip_writer_add_from_zip_readermz_zip_writer_finalize_archivefflushmz_zip_writer_finalize_heap_archivemz_zip_writer_endmz_zip_writer_init_heapmz_zip_writer_init_filemz_zip_add_mem_to_archive_file_in_placeremovemz_zip_extract_archive_file_to_heap_ZN6jxcore14CompressStringEPN4node7commonsEPKcl_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZN6jxcore14CompressStringEPN4node7commonsEPN2v86HandleINS3_5ValueEEE_ZNK2v85Value8ToObjectEv_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN6jxcore10RaiseCacheEm_Z10customLocki_Z12customUnlocki_ZN6jxcore11RemoveCacheEv_ZN6jxcore16UncompressStringEPN4node7commonsEN2v86HandleINS3_6ObjectEEEm_ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN6jxcore16UncompressNativeEPN4node7commonsEPKcm_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit A B3     w  A BCA B D A B l   A BFt D   A BfEA B(EA B3F2&2v 2 A B -  " A BdGA B1HcIJA B1HcIF2#2i22212-B$A B) A BCO B A B#QA B  A B#SO BS A B e  t { @ ` 4  1G! q! ! ! &          $ !( ", #0 4 8 $< @ %D &H 'L P T (X \ )` *d +h ,l -p t x |  .  / 0 1 2 3 4 5 6 7         8 9 :A BqWOWA BJTlX{UUA BWEDECA BgWA B DWGCA B  A IfKIGG;!J W  4 A ` I    IA BC] A BGA BY_A B]bA B=Da_mC^A BD *ldA BK *cdA B/ A B1g_  " <PA BChA BUitcPPA B;jA BDDEg  *_^^G^ oL *.LCCCCA BKlA B r A B/qpp L W LA Bbuu`v,v}u`A B5tkwA BKwA BKxA ByA B5tQ{A B9qpp:WLLLA B5t[}A B6qR ;e 0}A BA BV;r5A B>;Y $z5 A B <)OI]H; A5A B5tSA B2 -B R A Bs D = 'A Buq>F22L g 8 _) ^A BcA Bu <0^IfHI>-JmLFg 8_K L ^ J]>222 2H2A BA B3 'PA B 'A B '9A BFGA B4 DGZ ;j A B@f/fA Bct{A BR,DQkCC A B%3DRh A B&, 4 @CI RDX b sA B 4: FCS \Di n A B"4B\b YCD  Y  *@C^kCA BKYXCjDCA B ( 2: $,4<DL ` P!$'*P-t0258 ;P>ADLFxIL NXQ|SUWY[@]d_admdoqsuHwy{ }H \ p  H |   4 X    @ T |   t  Dp(hTpP4t0L|x!4<Ox!<<AD!D'D,DW` S @XZH<u& @Z< &0+ @Z< [ `_ 0\ X @Z8<{2a  @[@<.0 BDP_!@   @H[< 3 @`[<",3 Z@ >V @x[<%{~ `   @[<)o+7p+\`++P @[(<. - - @[<1(.Q .M @[(<4m.. @\(<7{/R @8\0<922  @h\(<<2;L; ]l=y=w u @\<A=>& @\<D&>0> @\<GB>P>A>0>9F>j>.f @\<N??% @\ <Q5@@@. @]<Tn@p@A"@>@: @(]<YM_Aq`A( m @@]<\i @]<^jj4  @x_ <aop @_0<d p9 p 5 @_0<g\ vr r @_<j s sz @`(<m t* t & @8`<p? :h @Nd @`<s  = @a<v ͌ Ќo @a<y ? @; H\ Pt X ` @0a <    @Pa0< ͏$ Џ @a <E br pn @a <   @a<  N @a8<4 V NR @b<k > @ @(b0<  F @Xb< F W`  @pb<F``V} @c<ә+DQ$0_ @(c<W4`0 @@c8<h   @xc8<9d5 @c<e$0| @c <V @c<'\VX @c<fpV @d<ƫЫ  @ d <8Tm`"i @@d@<l @d <-) @dH<Qصvr @d< @e(< @(e0<[?`; @Xe`<]wd @e <{ @e(<k-p%) @f8<R~h z @8fp<n @f<~   @f<)/^0]Z @xg0< @g<fp @g <>cE_ @g <{U` @h(<  @(h <H D @Hh@<f @hX<pp @h0<0CsPo @i@<t @Pi8< Nzv @iX<  y @iP<Bt> @0j<  @j0<@F< @k8<qm @8k<}@, @9@f|@|@| +P@' @@kP<%[@@@y, D@@@@@@" @@F @@e @@ @ @ @ S !`0!5!Q!0(Z!n!j! @k<9 !D/=A JA/0 1560953067 501 20 100644 26400 ` ELFH]4(?<67EACCESEADDRINUSEEADDRNOTAVAILEAFNOSUPPORTEAGAINEALREADYEBADFEBADMSGEBUSYECANCELEDECHILDECONNABORTEDECONNREFUSEDECONNRESETEDEADLKEDESTADDRREQEDOMEDQUOTEEXISTEFAULTEFBIGEHOSTUNREACHEIDRMEILSEQEINPROGRESSEINTREINVALEIOEISCONNEISDIRELOOPEMFILEEMLINKEMSGSIZEEMULTIHOPENAMETOOLONGENETDOWNENETRESETENETUNREACHENFILEENOBUFSENODATAENODEVENOENTENOEXECENOLINKENOLCKENOMEMENOMSGENOPROTOOPTENOSPCENOSRENOSTRENOSYSENOTCONNENOTDIRENOTEMPTYENOTSOCKENOTSUPENOTTYENXIOEOVERFLOWEPERMEPIPEEPROTOEPROTONOSUPPORTEPROTOTYPEERANGEEROFSESPIPEESRCHESTALEETIMEETIMEDOUTETXTBSYEXDEV, ''errnocodepathsyscallUnknown system errno %dFATAL ERROR: %s %s jxcore-logFATAL ERROR: %s %s:%i %s messagename%s: _fatalExceptionSIGHUPSIGINTSIGQUITSIGILLSIGTRAPSIGABRTSIGBUSSIGFPESIGKILLSIGUSR1SIGSEGVSIGUSR2SIGPIPESIGALRMSIGTERMSIGCHLDSIGSTKFLTSIGCONTSIGSTOPSIGTSTPSIGTTINSIGTTOUSIGURGSIGXCPUSIGXFSZSIGVTALRMSIGPROFSIGWINCHSIGIOSIGPWRSIGSYSUWVSd$Et9E8t} }E vE $Eč&E̍&EuEĉD$Ẻ4$D$D$4$D$E$D$E4$D$EtRD$4$D$E$D$E4$D$D$4$D$EuD$ |$D$4$EԃD$E$E4$D$M Eԉ|$L$4$EEԃD$ |$4$T$EEȃD$ D$EԉD$EЉ$MD$ |$4$L$EԃD$ |$4$T$EẼD$ D$EԉD$EЉ$EtfMD$ |$4$L$EԃD$ |$4$T$EẼD$ D$EԉD$EЉ$EtfED$ |$4$D$EԃD$ |$4$T$EẼD$ D$EԉD$EЉ$EP;Ee[^_]E2fE"fEfEfEfEfEfEfEfEfEfEfErfEbfERfEBfE2fE"fEfEfEfEfEfEfEfEfEfEfErfEbfERfEBfE2fE"fEfEfEfEfEfEfEfEfEfEfErfEbfERfEBfE2fE"fEfEfEfEfEfEfEfEfEfEfErfEbfERfEBfE2fE"fEfEfEfEfEfEfEfEfEfEft&HEĉ$D$HqpUSd$܋D$0D$T$D$D$T$$d$$[]USd$܋D$0D$T$D$D$T$$d$$[]UWVSd$E E8E u$D$M4$L$EȉMD$4$D$E$D$E4$D$MЍE߉ED$ $D$EtdE$MЉD$E $D$D$4$D$MЉ4$L$D$4$D$EuD$ |$D$4$EԃD$E$E4$D$U Eԉ|$T$4$EEԃD$ |$4$T$EEăD$ D$EԉD$Ẻ$MD$ |$4$L$EԃD$ |$4$T$EEȃD$ D$EԉD$Ẻ$EtfED$ |$4$D$EԃD$ |$4$T$EEȃD$ D$EԉD$Ẻ$EtfED$ |$4$D$EԃD$ |$4$T$EEȃD$ D$EԉD$Ẻ$E䋳P9u2EP9uXEe[^_]vE $Et&tvHE$D$륍&t6HEЉ$D$|t&ǐzvHqpɐt&HyxUWVS$TuE M\`t<$\`L$$``dD$D$ $T$\d\`, $D$d1t\$\`D$ T$$t$<$e[^_]fL$ D$MD$d $\`\d`D$ T$$L$\d,`\T$$ UWVtS$TE 4$}`4$$\`<$XD$D$d\D$ $D$\X\d,` $D$`d1t`$`D$ |$L$$4$e[^_]Ív`}D$d<$D$ D$X|$d\D$ $|$\X\d,`$L$UVSd$t$ t,1t $T$$$T$d$[^]fUSd$܋D$0t5T$4D$ D$T$$D$t&D$4$D$ D$D$UWVSd$tƃe[^_]ÍvE؍$ƃEEU$UD$u|$$D$Ut$$UED$D$E$EE$4$EMD$|$L$ $D$Ut$$ED$Ủ$D$UU$U4$E4$M|$$L$ D$U$E$E$e[^_]UWVuSd$4$} 4$$kE}E$E|$EEE$EEt'у/D$ED$$EątaE$D$ D$$D$$E$4$e[^_]Í&EM $}̉MD$E$EMED$<$D$}<$D$ D$$D$<$8fEE$EfJyR }EM<$D$EU<$ET$D$ D$T$UE<$D$ T$EUE<$T$D$E}D$E}}<$D$}EMƒEƒED$D$Ẻ$<$D$ D$$D$<$UBt&<$8nLxuBxl8<$EvPz;@ -ẺʉPz&@ tUWVuSd$4$4$$0x &xD$ EED$$D$U1tU$UD$ET$$E$EED$E$EEEԉ$E1t $D$MED$ L$D$E$EEE$t|ED$$D$<$E$4$e[^_]ÍED$$<$D$4$e[^_]Ðt&E$uED$$D$<$pD$t&ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐUVSd$4$t$D$$d$[^] $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,;AB C. AAA I L>AB AxA  p>AB AxA ,AB C1 AAA F ,AB C  AAA C 0AB BG AAA D ((OAB B~ AA C TzAB A8pAB Cc AAA D `AAA ,AB BD AAA H <AB BDm AAA G o AAA F '$0FAB B~AA Xl.symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.text.unlikely._ZN4node14ErrnoExceptionEiPKcS1_S1_.rel.text._ZN4node14ErrnoExceptionEiPKcS1_S1_.rel.rodata._ZN4node14ErrnoExceptionEiPKcS1_S1_.text.unlikely._ZN4node19get_uv_errno_stringEi.rel.text._ZN4node19get_uv_errno_stringEi.text.unlikely._ZN4node20get_uv_errno_messageEi.rel.text._ZN4node20get_uv_errno_messageEi.text.unlikely._ZN4node11UVExceptionEiPKcS1_S1_.rel.text._ZN4node11UVExceptionEiPKcS1_S1_.text.unlikely._ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s.rel.text._ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s.text.unlikely._ZN4node8SetErrnoE8uv_err_s.rel.text._ZN4node8SetErrnoE8uv_err_s.text.unlikely._ZN4node9maybeExitEPNS_7commonsEi.rel.text._ZN4node9maybeExitEPNS_7commonsEi.text.unlikely._ZN4node12OnFatalErrorEPKcS1_.rel.text._ZN4node12OnFatalErrorEPKcS1_.text.unlikely._ZN4node20DisplayExceptionLineERN2v88TryCatchE.rel.text._ZN4node20DisplayExceptionLineERN2v88TryCatchE.text.unlikely._ZN4node15ReportExceptionERN2v88TryCatchEb.rel.text._ZN4node15ReportExceptionERN2v88TryCatchEb.text.unlikely._ZN4node14FatalExceptionERN2v88TryCatchE.rel.text._ZN4node14FatalExceptionERN2v88TryCatchE.text.unlikely._ZN4node12signo_stringEi.rel.text._ZN4node12signo_stringEi.rel.rodata._ZN4node12signo_stringEi.text.unlikely._GLOBAL__sub_I_error_definition.cc.rel.text.startup._GLOBAL__sub_I_error_definition.cc.rel.init_array.bss._ZZN4node20DisplayExceptionLineERN2v88TryCatchEE15displayed_error.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group   !"4$%'(*+-/0WF0z5245679 +:wz}-[=zKs Q Q4$o*^06<\B|HbN?TIZ6`ej ou{,CXd)7 >"D(.4h:@FULRX^ldpjpKu{vp`P@pp`P@0  #(-p2`7P<@A0F KPUZ_dinsx}p`P@0 p`P@0  $+29@GNU\cjqxyqiaYQIB;3+$ (++%+++1+7+=+C+I+O+U+[+a+g+m+s+y+++++x+p+h+`+X+P+H+@+8+0+8;7 #CLi|$h> >#5Gt = g O  z   " : L u     # C [ %      & ? i (     4 R '+k 6     error_definition.cc_ZZN4node20DisplayExceptionLineERN2v88TryCatchEE15displayed_error_GLOBAL__sub_I_error_definition.cc_ZStL8__ioinit.L5.L262.LC0.LC77.LC78.LC79.LC80.LC81.LC82.LC83.LC47.LC4.LC10.LC6.LC44.LC60.LC27.LC25.LC70.LC43.LC62.LC9.LC17.LC71.LC24.LC5.LC21.LC12.LC73.LC54.LC28.LC40.LC13.LC11.LC37.LC38.LC36.LC2.LC1.LC3.LC58.LC65.LC49.LC66.LC33.LC15.LC57.LC23.LC61.LC7.LC34.LC64.LC45.LC51.LC72.LC41.LC52.LC22.LC48.LC30.LC56.LC53.LC46.LC35.LC14.LC67.LC16.LC63.LC32.LC68.LC69.LC50.LC20.LC74.LC59.LC31.LC39.LC26.LC29.LC55.LC42.LC75.LC18.LC8.LC19.LC76.L6.L8.L9.L10.L11.L12.L13.L14.L15.L16.L17.L91.L19.L20.L21.L22.L23.L24.L25.L26.L27.L28.L29.L30.L31.L32.L33.L34.L35.L36.L37.L38.L39.L40.L41.L42.L43.L44.L45.L46.L47.L48.L49.L50.L51.L52.L53.L54.L55.L56.L57.L58.L59.L60.L61.L62.L63.L64.L65.L66.L67.L68.L69.L70.L71.L72.L73.L74.L75.L76.L77.L78.L79.L80.L81.L82.LC88.LC92.LC93.LC94.LC96.LC97.LC98.LC100.LC101.LC102.LC104.LC106.LC136.LC135.LC134.LC133.LC132.LC131.LC130.LC129.LC128.LC127.LC126.LC125.LC124.LC123.LC121.LC122.LC120.LC119.LC118.LC117.LC116.LC115.LC114.LC113.LC112.LC111.LC110.LC109.LC108.LC107.L295.L265.L266.L267.L268.L269.L270.L271.L272.L273.L274.L275.L276.L277.L278.L279.L280.L281.L282.L283.L284.L285.L286.L287.L288.L289.L290.L291.L292.L293.L294_ZN4node14ErrnoExceptionEiPKcS1_S1___x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN4node7commons11getInstanceEvstrerror_ZN2v87Isolate10GetCurrentEv_ZNSsC1EPKcRKSaIcE_ZNSs6appendEPKcjstrlen_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZNK2v85Value8ToObjectEv_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZNSs4_Rep20_S_empty_rep_storageE_ZNSs4_Rep10_M_destroyERKSaIcE_ZN4node19get_uv_errno_stringEiuv_err_name_ZN4node20get_uv_errno_messageEiuv_strerror_ZN4node11UVExceptionEiPKcS1_S1__ZNSs6assignEPKcj_ZNSs6appendERKSs_ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s_ZN2v811HandleScopeC1Ev_ZNK2v85Value8ToStringEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScopeD1Evsnprintf_ZN4node8SetErrnoE8uv_err_s_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node9maybeExitEPNS_7commonsEi_ZN4node9EmitResetEN2v86HandleINS0_6ObjectEEEi_ZN4node12OnFatalErrorEPKcS1___android_log_printabort_ZN4node20DisplayExceptionLineERN2v88TryCatchE_ZNK2v88TryCatch7MessageEvuv_tty_reset_mode_ZNK2v87Message21GetScriptResourceNameEv_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEv_ZNK2v87Message13GetLineNumberEv_ZNK2v87Message13GetSourceLineEv_ZNK2v87Message14GetStartColumnEv_ZNK2v87Message12GetEndColumnEv_ZN6jxcore8JXStringD1Ev_ZN4node15ReportExceptionERN2v88TryCatchEb_ZNK2v88TryCatch10StackTraceEv_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEbstderrfflush_ZNK2v88TryCatch9ExceptionEv_ZNK2v85Value8IsObjectEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN4node14FatalExceptionERN2v88TryCatchE_ZNK2v85Value10IsFunctionEv_ZN2v88TryCatchC1Ev_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZNK2v88TryCatch9HasCaughtEv_ZN2v88TryCatchD1Ev_ZNK2v85Value12BooleanValueEv_ZN4node12signo_stringEi__x86.get_pc_thunk.cx_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitpthread_create E War .  /!"! 0!"! 1)!G#\$p%& 2#'# 3#='_#s 4#'# 5#'#(B 6R 7b 8r 9 : ; < = > ? @ A B C" D2 EB FR Gb Hr I J K L M N O P Q R S" T2 UB VR Wb Xr Y Z [ \ ] ^ _ ` a b c" d2 eB fR gb hr i j k l m n o p q r s" t2 uB vR wb xr y z { | } ~   `') +      + $ ( , 0 4 8 < +@ D H L P T X \ ` d h l p t x | + + + + + + + + + + + + + + + + +  + + +   + + +  $ +( , 0 +4 +8 +< +@ +D +H +L +P T +X +\ +` d h l p t x +|  +            + +   +     + + + + +  + +  3+ 3- -I*b p /|!"!  "/ 0! 0 1$!B#W$k%& 2#'# 3#8'Z#n 4#'# 5#'(G,Z`{)`) ?2l+#34' 5 A6q#  .268>9u+#34'5B Q6{# *4:;I % / C=H>a k t=  & &5 > &G2\@gAq =BCDE =F%C3D>GFHO g=rI}I5  2'8/9_KvLMD =NOI5$P5Q_CqD{  =I?% #$ E#^RRCD  =ID9II  2$8,9` v#4RTPU4 V4WKJ[:fXn5J:5YJ:[  * 2 : B J R Z b j r z     " ,      $ ( , 0 4 8 < @ D H L P T X \ ` d h l p t x |   '\( ]2^:_" P t ,Xt 4"\(p)C4=[C<=D!D'D,2D;ErP;n @0M=  @P= > @T= %Y>U @T= @T`= @PV`=N}y @Vp=LPO @ W(=-z) @HWH=Q  @W=" @hXH=%7\s`o @Y=(OP' @xZ=+x @[=-H FD @\8=0}H y @\=2L L L P 0T (%| 9| |5 @\x=:"JD)> T? jx_thread.o/ 1560953066 501 20 100644 2732 ` ELF4(UVSd$D$8t$0D$D$4D$D$$tD$d$ [^]USd$D$ $d$[]UVSt$[^]D$T$9Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (OAB B~ CA C H+AB AeA $l#AB BYAA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN6jxcore8JXThread6CreateEPFvPvES1_.rel.text._ZN6jxcore8JXThread6CreateEPFvPvES1_.text.unlikely._ZN6jxcore8JXThread4JoinES0_.rel.text._ZN6jxcore8JXThread4JoinES0_.text.unlikely._ZN6jxcore8JXThread10GetCurrentEv.rel.text._ZN6jxcore8JXThread10GetCurrentEv.text.unlikely._ZN6jxcore8JXThread6EqualsES0_.text._ZN6jxcore8JXThread6EqualsES0_.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group   O3I_pv+ # jx_thread.cc_ZN6jxcore8JXThread6CreateEPFvPvES1___x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_uv_thread_createabort_ZN6jxcore8JXThread4JoinES0_uv_thread_join_ZN6jxcore8JXThread10GetCurrentEvuv_thread_self_ZN6jxcore8JXThread6EqualsES0_ 0K   Lp   4<!<'<,<d@O` @t + @ # @ ?m0(*, @( handle_wrap.o/ 1560953068 501 20 100644 9680 ` ELF4(52*-T$D$BPSD$RH P P @B[UVSd$t$ 4$4$d$[^]UW}VSd$<$EpEԉEЋV$T$UԃEFuNFt.D$D$$Ft$F4$P<$e[^_]ÐNUЉE̋$L$MԃUD$D$L$ T$E̋N$L$UЃYUVSd$t$ Ft$l$Nd$[^]UWVuSd$ĉ4$}E PJytdD$ $te$Eԉ$Uԃ1t $4$D$4$e[^_]fB tPzu@뚍vUVSd$t$ Ft$l$fd$[^]UWVuSd$ĉ4$}E PJytdD$ $te$Eԉ$Uԃ1t $4$D$4$e[^_]fB tPzu@뚍vUWVuSd$ĉ4$E xPJyD$ $…B$UЉL$UЅB}ԉ<$Uԃ1t $D$4$}4$Ee[^_]fR qBxu R`vt&'Eԉ$Uԃ1t $D$4$M녍t&E HE }ԋ@$U(UЋJB<$L$ỦEEԃỦEЋE @E~rM I<$ỦD$MEԃMD$ D$EЉL$$ŨJt&UЍ}ԉ<$EԃUKt&<$UȉEMԃE̋UuUWVuSd$ċ}@G4$4$$EOGGtxU 1tE MЉ$MЉGUԉ$D$MEԃ|$D$$MЍW G @GP4$e[^_]ÍvEMWUVSd$4$t$D$$d$[^]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0.Al$L0AB BhAA ,tAB AE AAA B 05AA AO _A AA,AB BD AAA E 05AA AO _A AA,PAB BD AAA E ,'AB BD AAA E ,AB BD AAA D $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10HandleWrap9SetHandleEP11uv_handle_s.text._ZN4node10HandleWrap9SetHandleEP11uv_handle_s.text.unlikely._ZN4node10HandleWrapD2Ev.rel.text._ZN4node10HandleWrapD2Ev.text.unlikely._ZN4node10HandleWrapD0Ev.rel.text._ZN4node10HandleWrapD0Ev.text.unlikely._ZN4node10HandleWrap7OnCloseEP11uv_handle_s.rel.text._ZN4node10HandleWrap7OnCloseEP11uv_handle_s.text.unlikely._ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text._ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node10HandleWrap5unrefEv.rel.text._ZN4node10HandleWrap5unrefEv.text.unlikely._ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE.rel.text._ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE.text.unlikely._ZN4node10HandleWrap3refEv.rel.text._ZN4node10HandleWrap3refEv.text.unlikely._ZN4node10HandleWrap3RefERKN2v89ArgumentsE.rel.text._ZN4node10HandleWrap3RefERKN2v89ArgumentsE.text.unlikely._ZN4node10HandleWrap5CloseERKN2v89ArgumentsE.rel.text._ZN4node10HandleWrap5CloseERKN2v89ArgumentsE.text.unlikely._ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_s.rel.text._ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_s.text.unlikely._GLOBAL__sub_I_handle_wrap.cc.rel.text.startup._GLOBAL__sub_I_handle_wrap.cc.rel.init_array.rel.data.rel.ro._ZTVN4node10HandleWrapE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    "#%&F&.,(*,-/0.=k. -!*. 0 -E^R5%]5' +4P#!Vs#handle_wrap.cc_GLOBAL__sub_I_handle_wrap.cc_ZStL8__ioinit_ZN4node10HandleWrap9SetHandleEP11uv_handle_s_ZN4node10HandleWrapD2Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZTVN4node10HandleWrapE_ZN4node10HandleWrapD1Ev_ZN4node10HandleWrapD0Ev_ZdlPv_ZN4node10HandleWrap7OnCloseEP11uv_handle_s_ZN2v811HandleScopeC1Ev_ZNK2v85Value8ToObjectEv_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrap5unrefEvuv_unref_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN4node7commons11getInstanceEv_ZN4node10HandleWrap3refEvuv_ref_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsEuv_close_ZNK2v85Value10IsFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_s_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v87Isolate10GetCurrentEv_ZN4node10HandleWrapC1EN2v86HandleINS1_6ObjectEEEP11uv_handle_s_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit* +,* +-$/ * +172e3t4567* +%: * +1C<O9Z=p>|?5@* +%B * +1C<OAZ=p>|?5@ * +1G<b0qE=>?5@=>)?VFy26G== * +,119IAJyK235L* + !N( O2P:Q- .( 4P x  T "43,<3*D!D'D,DiP``. @3 0 @ 3 3rn @H31a5] @3 @P3%5! @h3F @P3' @3 ({w @pX3#F @83&"H @3(2P. @3*Wdkd0h( @ h30 ` 4( thread_wrap.o/ 1560953070 501 20 100644 24916 ` ELFdV4(FC>UWVuSd$ĉ4$}4$$Eԉ$Uԃ1t $4$D$4$e[^_]UWVuSd$4$4$$U x:tKEĉ$Uă1t $4$D$M4$Ee[^_]t&UԍET$UЉ$T$Eu5EԉD$EЉ$UԍEĉ|$$T$Eă냐t&$aEԍUĉ|$D$$Multi-tasking is already enabled for native embedding interface, you can not use bothMissing parameters (sendToAll) expects (int, string, int).Missing parameters (killThread) expects (int).Missing parameters (setCPUCount) expects (int).Missing parameters (addTask) expects (int, string, string, int, boolean).../src/wrappers/thread_wrap.ccUWVuSd$ĉ4$4$$U x8uTEԉ$Uԃ1t $D$4$M4$Ee[^_]}ԉT$D$ L$<$Uԃ<$T$Uԃ<$T$Eԃ댍vEԉ$Uԃ1t $D$4$}cUWVuSd$ĉ4$4$$U x8uLT$Eԋ$T$Eԃ4$D$M4$Ee[^_]t&}ԍT$L$D$ <$Uԃ<$T$Uԃ<$T$눐Eԉ$Uԃ1t $D$4$}gUWVuSd$ĉ4$4$$U x:8ud$$D$Mԉ|$ $Eԃ4$D$}4$Ee[^_]t&EԍL$D$ |$$EUԃEЉT$$UԃEЉT$$EԃD$4$M|Eԉ$Uԃ1t͋$t&|$ED$$UWVuSd$ĉ4$4$$U x:8uDD$Mԉ|$ $Eԃ4$D$M4$Ee[^_]Eԍ|$L$D$ $EUԃEЉT$$UԃEЉT$$넍Eԉ$Uԃ1t $D$4$}dUWVuSd$ĉ4$4$$U x:8u\$D$Mԉ|$ $Eԃ4$D$M$4$Ee[^_]EԉL$D$ |$$EUԃEЉT$$UԃEЉT$$Eԃ4$D$M널Eԉ$Uԃ1t $D$4$}LaddTaskresetThreadsendToAllgetResultsjobsCountsetCPUCountgetCPUCountthreadCountsetProcessExitingcpuCountfreeGCkillThreadnullnode_thread_wrapUWUVuSd$ĉ$}U4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍL$4$D$EEЃ<$D$ D$EԉD$Ủ$e[^_]UW}VSd$<$u <$$x VU8}EĉEuL$D$ D$4$Eă4$D$Eă4$D$Eă<$D$U<$Ee[^_]Eĉ$Uă1t $D$<$M붍t&učL$D$ D$4$Eă4$D$Eă4$D$Eă뜍vF$MM}~}Fƒ@@}~F$MM}VlF$E~<F$EẺ$E~FD$ED$$EЉE~{E}E ~W}}E$D$1ɉ4$9u|$L$ 90}̋}E$E$MEăM`&E$EăMp&E$EăfE$EăfE$EăfuE$D$1҉4$9u‰T$ UT$*vEM$EăMUWVuSd$4$} 4$$xO8EԉEЋ}ЍT$D$ D$<$Eԃ<$D$Eԃ<$D$Eԃ4$D$M4$Ee[^_]t&Eԉ$Uԃ1t$벐t&zGEčEԉEЋEĉUȉM̉$UȄ4GM̅G$M$‹Mf@tEG$UŪt#G$UŪu BXỦ$$Ű$EЉ$vEЉ$EԃM6&}ԍT$D$ D$<$Eԃ<$D$Eԃ<$D$EԃME̋EЉ$EԃUt&MȍEԉ$ỦEEԃŰMȉEjEЉ$EԃU&EЉ$ UWVuSd$ċU 4$U4$$UЉǀEЋB9 1EԉE̋}̍D$ED$ <$D$Eԃ<$D$Eԃ<$D$EԃD$4$M4$Ee[^_]&UЍED$$T$뱍t&Eԉ$Uԃ1t$됐t&}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ4$D$}8t&BMԉM̉$UUȋBB$W@~ @$9M9}jUȃ$$$MЉD$ẺL$$Eԃ4$D$U@t&$9}gẺ$EԃfO$4GD$T$$@GUȍEԉ$EEԃUPUWEVS$t$u E<$$x~ M8EEuD$ED$ 4$D$E4$D$E4$D$ED$E$ME$Ee[^_]E$U1t$밐t&uD$ED$ 4$D$E4$D$E4$D$XF$~f2NAƒUƒ}}BxB ~`NAƒUƒ}4}qBxdB VM~F $-$~ F$ EVF$EE$EẺ$EFYNQ׃yED$|$$EĉEFiNQ׃yED$|$$EЉEFF $~F$}E$EE$$EU|$MT$UL$MT$Ut$Ɖ$L$ T$ht$ȉ )i')) $EE~&E<$D$ D$D$9>}ڋED$ED$E$ED$E$UE$E$t&E$EƒG~NQЃEf$EVt&E$UFуdNvE$E&fE$E$}$ugED$D$E$ED$E$MfE$EWf}-8E$Ev~F$2~F$EE$UFу~Nz&JyR E/E$}fE$EbfE$E*fE$}f@@vE$Eƒ~NQЃE|zHJyR E@@!vE$EЃEz랋@@Mt&E$E @@+t&E$EЃEE$E~~6FƒPz@ E$EUW}VSd$E<$uEE !E EЋMЍED$$L$EEԃ4$EE 4$uT4$t}tD$4$4$Ẻ<$D$M<$Ee[^_]MĉED$ED$ $D$UȃEԋMĉT$EBEȋEЉ $D$EMD$ D$Eԉ $D$U$/EЍvUWVuSd$ĉ4$4$$U x :uLD$UD$ D$$Eԃ4$D$}4$Ee[^_]}ԍL$D$ T$<$Uԃ<$T$Uԃ<$T$EԃD$4$MfEԉ$Uԃ1tԋ$UWVSd$E$Nj@`te[^_]Í&E؉$E1t $EuċE|$D$ 4$D$Mă4$L$Mĉ4$D$MMEĉMԋ4$EЉL$MЋEL$Mĉ|$4$D$D$L$ E$e[^_]UVSd$4$t$D$$d$[^] @$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,vAB BDgAAA ,LAB BDu AAA G ,|'AB BD AAA D ,AB BD AAA H ,aAB BD AAA H , AB BD AAA C ,<GAB BD AAA C ,lAB EDAAA ,AB AE AAA D ,AB BD AAA H ,gAB BD AAA J ,,AB EC AAA D ,\eAB AE AAA D ,AB BD AAA D 8 AB Cg AAA H AAA $FAB B~AA  .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10ThreadWrap4FreeERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap4FreeERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap8CpuCountERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap8CpuCountERKN2v89ArgumentsE.rodata.str1.4.text.unlikely._ZN4node10ThreadWrap10SetExitingERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap10SetExitingERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap11GetCPUCountERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap11GetCPUCountERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap11ResetThreadERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap11ResetThreadERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap11ThreadCountERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap11ThreadCountERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap9JobsCountERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap9JobsCountERKN2v89ArgumentsE.rodata.str1.1.text.unlikely._ZN4node10ThreadWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node10ThreadWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node10ThreadWrap13SendToThreadsERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap13SendToThreadsERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap4KillERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap4KillERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap11SetCPUCountERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap11SetCPUCountERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap7AddTaskERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap7AddTaskERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap14collectResultsEPNS_7commonsEib.rel.text._ZN4node10ThreadWrap14collectResultsEPNS_7commonsEib.text.unlikely._ZN4node10ThreadWrap10GetResultsERKN2v89ArgumentsE.rel.text._ZN4node10ThreadWrap10GetResultsERKN2v89ArgumentsE.text.unlikely._ZN4node10ThreadWrap13EmitOnMessageEi.rel.text._ZN4node10ThreadWrap13EmitOnMessageEi.text.unlikely._GLOBAL__sub_I_thread_wrap.cc.rel.text.startup._GLOBAL__sub_I_thread_wrap.cc.rel.init_array.data._ZZN4node10ThreadWrap7AddTaskERKN2v89ArgumentsEE3nth.rel.data.rel.node_thread_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group     !#$&')*:,-/02356EF6c=8:;=>@Ar w|)3?KWiryX ?v>3Kn/ _k|'(L|a6TrG'"c*7{!0g'$D]{ 8Rp > L      e-- M ] r      3  '      ;thread_wrap.cc_ZZN4node10ThreadWrap7AddTaskERKN2v89ArgumentsEE3nth_GLOBAL__sub_I_thread_wrap.cc_ZStL8__ioinit.LC2.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC21.LC23.LC25.LC28.LC27_ZN4node10ThreadWrap4FreeERKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_ZN4node10ThreadWrap8CpuCountERKN2v89ArgumentsEuv_cpu_infouv_free_cpu_info_ZN2v87Integer3NewEiPNS_7IsolateEsysconf_ZN4node10ThreadWrap10SetExitingERKN2v89ArgumentsE_ZN4node7commons24embedded_multithreading_E_ZN4node7commons15process_status_E_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN4node10ThreadWrap11GetCPUCountERKN2v89ArgumentsE_ZN4node7commons15threadPoolCountE_ZN4node10ThreadWrap11ResetThreadERKN2v89ArgumentsE_Z24checkIncreaseThreadCounti_ZN6jxcore15CreateInstancesEi_ZN4node10ThreadWrap11ThreadCountERKN2v89ArgumentsE_Z14getThreadCountv_ZN4node10ThreadWrap9JobsCountERKN2v89ArgumentsE_Z10customLocki_ZN6jxcore11getJobCountEv_Z12customUnlocki_ZN4node10ThreadWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10ThreadWrap7AddTaskERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node10ThreadWrap13SendToThreadsERKN2v89ArgumentsE_ZN4node10ThreadWrap10GetResultsERKN2v89ArgumentsE_ZN4node10ThreadWrap11SetCPUCountERKN2v89ArgumentsE_ZN4node10ThreadWrap4KillERKN2v89ArgumentsE_ZNK2v85Value8IsNumberEv_ZNK2v85Value12IntegerValueEv_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEv_ZN6jxcore11SendMessageEiPKcib_ZN6jxcore8JXStringD1Ev_ZNK2v85Value7IsInt32Ev_ZNK2v85Value9IsBooleanEv_ZNK2v85Value12BooleanValueEv_ZN2v82V818TerminateExecutionEPNS_7IsolateEuv_stop_ZN2v84TrueEv_ZN2v85FalseEv_ZN4node7commons8mapCountE_Z14setThreadCounti_Znwj_ZN4node7commons7mapDataE_ZN4node7commons12TriggerDummyEP10uv_async_siuv_async_init_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN6jxcore3JobC1EPKciS2_iiib_ZN6jxcore9addNewJobEiPNS_3JobE_ZN6jxcore16increaseJobCountEv_Z22getIncreaseThreadCountv_ZN4node10ThreadWrap14collectResultsEPNS_7commonsEib_ZN2v85Array3NewEPNS_7IsolateEi_Z10threadLocki_Z15pullThreadQueuei_Z18IsThreadQueueEmptyisetThreadMessage_Z12threadUnlockifree_ZN2v87Isolate10GetCurrentEv_ZN4node10ThreadWrap13EmitOnMessageEi_ZNK2v85Value8ToObjectEv_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_thread_wrap_module G HI'J/K:LPM\NfO G HI$J,KDLZMfNsOQRST G HI$J,KCVNW_LuMNO 1XYZL MN G HI$J,KCVU\cSuNO 1XYZLM N G HI$J,KCVT^h_{SNO 1XYZ N'L=M[S G HI$J,KCVMa`SrNO 1XYZLM N G HI$J,KCVTcYdlS~NeO 1XYZNL-M9N G H%I+gGhYib 2|jk]hi 3jkl7hIiR 4ljkmhi 5jk b'h9iB 6\j}knhi 7jk[h)i2 8Ljmks`hi 9jkUhi" :<j]kcPhi ;jkFh i <,jMkSoohi =jkO G HI'J/KIVk >XYZNOLMN 1-X?YQZpppqq'rNsq\tu\vLL7LOLgLtuL G HI'J/KFVg ?XYZNOLMwFqQKxyKz{|L 1-X?YQZjLLL} G H"I*J2KQV`\ @XYZNOSL5MB 1`XrYZNpq\ \c!~'\FeL\V\\f_|SN\L <\UL G H'I/J7KQVr AXZNOLM 10XBYew4w]xqrrs!sAq[yrtt + +(\. B^u{SNvvLLLOLgLuy^SNL\_4xTygLLLLL?LLLGLgLL G H%IYj|NOXSAkLV G HI$J,KCVgyNO 1XYZNLMG HKBITMuOG H -( 2:' f P  @p0`!#%'$.4 Df@DGH!H'H,HkPvg @HHD @HhD 2_%0k0'g @DIDX` @ID%xlah @\JD @JD'kGg @|KD2W    @L`DB  @|N0D! @OD$8g{ @P`D'  @ R D*0"x"et @,TD-6$@$ @TD02\%k`% g @,UXD3i&p&F @U8D6& @UD8&C&? @UD;e&y&0&(''0 @UDA0*2 EF < memory_wrap.o/ 1560953074 501 20 100644 92608 ` ELFP4("#()+,./124578:;=>@ACDFGIJLMOPRSmnUWVuSd$ĉ4$}4$$U xuPtDD$MD$ T$ $Eԃ4$D$4$e[^_]Eԉ$Uԃ1tƋ$readEmbeddedSourcesetMapCountsetMapgetMapreadMapexistMapremoveMapsetSourcesetSourceIfNotExistssetSourceIfEqualsTosetSourceIfEqualsToOrNullreadSourceremoveSourcegetSourceexistsSourcenode != root()../src/jx/btree.hposition < node->count()leaf() == x->leaf()parent()->is_root()parent() == src->parent()src->count() >= count()to_move >= 1to_move <= src->count()parent() == dest->parent()count() >= dest->count()to_move <= count()child(i + 1)->count() == 0position >= node->count()dest->count() == 0count() >= 1i <= count()position <= -1position >= 0iter.node->leaf()iter.node == root()node_memory_wrapUWEVSd$ĉ$}E4$$ uD$ D$D$4$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$Eԃ4$D$T$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$EЉ$e[^_]fMissing parameters (setMapCount) expects (int).node->parent()->child(node->position()) == nodeposition() + 1 == src->position()i + to_move <= src->max_count()position() + 1 == dest->position()child(count() + i + 1) != NULLnode->count() == node->max_count()node->max_count() - node->count() == to_movenode->count() < node->max_count()*mutable_rightmost() == parent->child(0)!compare_keys(tmp_iter.key(), iter.key())Missing parameters (removeMap) expects (int, string).Missing parameters (existMap) expects (int, string).Missing parameters (readMap) expects (int, string, bool).Missing parameters (getMap) expects (int, string, bool).Missing parameters (existsSource) expects (string).Missing parameters (readSource) expects (string, bool).Missing parameters (getSource) expects (string, bool).Missing parameters (removeSource) expects (string).Missing parameters (setMap) expects (int, string, string/buffer).Missing parameters (setSourceIfNotExists) expects (string, string/buffer).Missing parameters (setSourceIfEqualsTo) expects (string, buffer/string, buffer/string).Missing parameters (setSourceIfEqualsToOrNull) expects (string, buffer/string, buffer/string).Missing parameters (setSource) expects (string, buffer/string).../src/wrappers/memory_wrap.ccUWVuSd$ĉ4$} 4$$xOEԉEЋ}ЍT$D$ D$<$Eԃ<$D$Eԃ<$D$EԃD$4$M4$Ee[^_]t&Eԉ$Uԃ1t$볐t&~~GMԉMЉ$UŪB$~gEЉ$Uԃ1t $D$4$M$Ct&U̍Eԉ$EEԃUlGG$BAM‹1$98$EЉ$Uԃ1t $D$4$Udt&EЉ$Eԃ8fIUW1VSd$ċt$T>D$PT$$N9~ދD$P;04tn~t$T1D$  9}>P;T$t닋HD$T H9|Ðt$TD$P;0l4$l$Hd$<[^_]Ív~t⋋F1L$V 9}‹J;L$t狫jɍT$/l$H $T$D$D$뫍vHqɉpDl$D$/D$l$H$D$Tl$H6~t$T1D$  9}-P;T$t닳t9H~6D$THɋD$P0jl$jT$+HqpƉl$D$/D$l$H$D$Tl$Htl$HD$ D$D$;$UWVSd$D$@$D$8QpD$D$ L$ p18LLj9t{l$8D$>F9>ut&8t1D$ i119u9ul$8t $D$L$L$|$t+D$4tt D$4$4$D$D$9l$8$d$,[^_]Ít&FW979/F8#~9uA@9F8t ׉~9tD$D$ D$$h>1$d$,[^_]11D$D$ D$$UWVSd$ċ|$Tt$P8On9}PDmDQ @ @O9|n9}:ITI & B Bn9|O9Ll$KLmFWLt$P։|$TljL$ t$l$H<$ F VoOGWnN;|$ű|$Tt$POF9}tt$P@|$TlT$ v 9}>Ur;t$tꋋJL$T I9|‹t$Pʋ|$TF9|$TIlD$vF 9}bEH;L$t拻pxȉl$D$/D$l$H $T$T$l$F 9||$T>D$HD$U9荮D$9 D$3D$ooPooootjo(o(((tEo8o888t oHoHHH9 l$L$P;T$Q 9D$l$l$| 1t&zV9~1'rO9ȉ~FVGd$<[^_]ÍWfx|$xD$fJyɉzl$T$/T$l$H4$D$D$Tl$HD$L$D$t$P2HpJ9ut$Pl$HD$ D$D$$UWVSd$ċD$Pxt d$<[^_]À8L$9A@8L$AD$P(}}1L$t&E 9}jP;T$t狋1Hȅɉl$D$/D$l$H$l$뫍v$l$HD$Pd$<[^_]ÐD$P(,$l$HD$PL$d$<[^_]Ívt$l$HD$4$~tvD$1xʼnL$&E 9}JP;T$t狋tuHȅ͉l$D$/D$l$H$l$믍&D$Pl$HL$;tqD$$N&HL$HD$fHL$HD$넍l$HD$ D$D$G$D$;D$ D$$UWVSd$ċt$Tl$PF9E-EV9VE9|$Xt9T$X<1ҋ|$XI &EЃ@L@ 9@uEl$@E|E|$@Dl$H$D$D$OPhT$WHPD$ol$GD$XD@|E@El$H|$D$D$D$|$XOPhT$WHPD$ol$G~~`t$T&Ul$|$ D$Rtl$H4$GWNFD$nVOo;D$Xl$ut$TN9L$X}nL$XFt$Tl$PI|ΐ|$l$H$D$ D$WH hL$OPHL$oOL$TI9|l$Pt$Tl$P 9|$X|WN)IDP;tߋHÍD$/l$H$D$9|$X}l$P1|$X}ML9jJuF;D$Xx^F;D$X|wD$XL$Xl$P1n<9|SGwDŽ~)9}ɋl$PD$XE(Fd$<[^_]ÐHih l$HD$ D$D$#$l$HD$ D$D$$l$HD$ D$D$$l$HD$ D$D$$l$HD$ D$D$$l$HD$ D$D$$UWVSd$ċl$Tt$PE9FFU9 VE9L$XL9T$X1ҍO |$X &EЃ@L@ 9@uMAtt$PIL$XDl$Tƍ I|Ol$HL$N $ T$ WNG VT$n F Oo ut$Pl$TFl$@F|D$X|$D@Dl$H$D$D$WHhL$OPHD$ol$HGF+D$X@|F@F|$D$D$D$WHhL$OPHD$ol$GF+D$X@DP;|$X}l$Tf ;t$XBl$H|$T$+D$X@D$D$D$WHhL$OPT$HD$oGB+D$X@DHL$;{h[D$/l$HD$D$ T$$T$;t$X;vl$Tր>Mt$Pt$XL$Xt&Jj@9uD$Xt$PVD$+T$XHTs1҉~|:qADŽM9~̉VTV@FvD$ǀ>NT$NɍR9ʍD0t$ƍ&V l$H4$T$T$FNVnFD$VNnHT$9ω|P;d$<[^_]fl$zN9}4D$t&'D$D$ ʼnJAN9L$|DŽ vH&jMJ9t7HKD$/l$H$D$2RTHqpȍl$HD$ D$D$$D$D$ D$$D$D$ D$$UWVSd$ċL$Xt$TL$4$L$L$9D$Pt89yy1l$A 9}ZP;T$t狫!hɍD$/l$H$D$ L$L$A9|& $l$Hd$<[^_]ÍvL9Qt&ytjq1l$A 9}JP;T$t狫hɍD$/l$H$D$L$L$뫍vD$P;Tl$HD$ D$D$;$hl$hD$fLtt&hl$hD$]UWVSd$ԋD$D(uEt$ MVL$L$z|$~9H9L$T$|$pH|79 ~H|$t |$DO~6~D$+T$,$l$89O׉T$1d$,[^_]ËD$tJV1 ~ހ|$u`1ɉl$)ȃǍl$84$9O|$D$Dxd$,1[^_]Ívxtut$T$&L$|$D9O|dt&D$DT$PD$@l$l$8t$$D$D0d$,[^_]ÐD$D$@l$l$8$UWVSd$L$01>t"yF9tQd$[^_]Í&AV98uv8tAd$[^_]ÍvF8u1V9u>'Q@h9uh}t1yd$[^_]ÐP;tˍl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$|$dl$`D$hoUD$dPE)ЈE|$dD$d1|$pD$("D$dD$|$ @9|$(FFl$$G Et$D$@Dl$X$D$ D$ NPhT$ VHPD$ nl$$FED$@DP9dHDl$ D$4D$l$X$l$ #vE}D$8ED$(D$<@ D$4ED$ G9@L$4l$4Fl$XL$$L$,D$8T$L$d1&T=TBJUt=Dq9~ȍd$L[^_]Í&U9t(UD$dPHyxffD$d1@cHD$,l$l$X$D$l$tBHxl$D$3D$l$X$l$W|$(pNH뻋Hqppl$XD$ D$D$}$l$XD$ D$D$$l$XD$ D$D$k$l$XD$ D$D$]$UWVSd$t$dAD$:AD$`y;iPD$$@T$D$ 9+D$9V҃T$(|$(N9F~D$l$XD$D$$L$$D$Qy)9~)Dž~ A8AD$-D$ D$$T$;T$ r&GD$9D$:G:9l$Xua$L@@@xVD$D$T$$D$VI9~ )ʃVd$L[^_]Í$@@@xVD$D$T$$D$`D$:9uLuPD$(@T$ D$$9)1҃~ƒT$,|$,OD$)9F~D$ ;D$$D$(l$XT$ $D$FQ9~)ЃFD$(PA9D$GD$ D$$t&L9v9l$X$TNjD$`@GGLGG@PD$`@xD$`89Ll$]&1 |$$W>DFl$XD$ D$D$$D$[D$ D$$D$&D$ D$$UWVSd$L$01>tryF8uAV9tvP;Q@uh}t։1y'd$[^_]Í&A8u)P8t@Ad$[^_]Íl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$ċ|$XD$8ZD$T8D$PoD$8T$Eyr9}Ol$D$l$D$D$ƉQBu9t$|ۋl$D$DŽD$oD$pT$FB9T$E|$X @Ǎtt&Nl$Ht$ $t$ FNnVFD$nVNH9||$XD$l$HH;T$TwD$(;t$,H Lt$TfB9@ "|$4$:t OT$(L$,uȋD$(t$,H9l|$tM8t8|$,WT$,H9}%'|$PWD$Pd$<[^_]D$($D$(T$,fD$T$D$TvD$P@묍vwl$H<$8HO I vPT$T$@ iqUыPL$,$l$HD$9ʉT$FʉL$L$T$)хDD$t$$D$D$PŋHFT$VED$UNFD$TPoD$8pQT$,8tL$,P9xD$($D$(ct:PЅ $D$(D$DmDD$PrpD$D$ D$$D$D$ D$$l$HD$ D$D$$UWVSd$ċL$\9L$XD$TD$,@D$ &'|$PȉL$(D$XL$ T$,t$$vDxT$$9Fl$l$HL$(u(T$$;|$ x t,;L$XuD$Xd$<[^_]Í&yFD$Xېt&9T$Xtv|$PЉT$(D$XT$ l$,t$$vDxl$l$H$9FωL$T$(u(l$$;|$ x t,;T$XuD$Xd$< @[^_]fyFD$Xېt&9l$XtpT$ &'L$PT$ D$Xl$$l$HDp$9FʋT$,L$T$T$ l$$uP9xNt9l$XuD$X @\D$`l$H|$ D$D$XD$D$TD$D$P$ @ÐyGD$XUWVSd$D$|D$8D$8Ht&'D$xD$,D$<@D$(&D$,|$8T$(L$4ȋL$<t$0vDxL$$9Fl$l$hL$4LT$0;|$(Dtl;L$,uʁ?@D$88u&D$8D$8Hfx&EM$EMt&:uiLLBEE1&t6xE$D$BE멍&xOHE11JE1wUWVuSd$4$} 4$$xE Wu}E}L$D$ D$<$E<$D$E<$D$ED$4$M4$Ee[^_]$U1tƋ$G$MUMMUAGƒ!@@GG$EẺ$EVG}D$D$<$<$MčUD$L$$MU}UED$EMMT$$L$ EUăE,EȋEt*8LLH9u;MtuE$U1t $D$4$MEP;E$$UMEMU:E$U뉐t&E$EfE$EVfH1&EM$EMt&:uqLLBEM1t>HȅE$D$BE롍&HyxE11[E1mUWVuSd$4$} 4$$EyWE}D$ED$ <$D$E<$D$E<$D$E4$D$M4$Ee[^_]&EP;FE$E$U1t $D$4$}듍&G$UUGƒ@@GG$EẺ$E|GD$ED$$E$MčUD$L$$MUEUT$D$MML$ MEE $UăEMȋEMt.8LXLH9u ;MI/G$UUE@DHUL$ @$D$ED$ED$4$}EP;hE$UE$EUt&E$EtfE$E0fH&E$Ef}|$PT$@$P1/$ vUE$EUt&:uiLLBEM91StfxE$D$BE멍&t=x|E$D$hxOHE[xOHE1B11UWVuSd$4$} 4$$EyWE}D$ED$ <$D$E<$D$E<$D$E4$D$M4$Ee[^_]&EP;E$E$U1t $D$4$}듍&G$UUFGƒ@@GG$EẺ$EGD$ED$$E$D$MĉL$E$MEUMD$ $UUT$ UEET$UăEMȋEMt.8.LLH9u ;MIG$UUE@DUHEL$ HE$L$D$E}@$EMD$$|$4$}EP;E$xt&UE$EUt&E$EDfE$EfH&E$Ef|ED$GD$G$EG$E}D$$U1Rt $D$4$}UE$EUKt&:uiLLBEM1tfx.E$D$BE멍&t=x8E$D$$xOHE[xOHE1B119UWVuSd$4$} 4$$x WtHE$U1t $D$4$M4$Ee[^_]UMMUu[EE}L$D$ D$<$E<$D$E<$D$Eft&G]GUUƒu@@{Ẻ$EOoG}D$D$<$<$}D$U|$$UUD$MMT$<$L$ EEUăE@MȅMt.8LoLH9u ;ME$U1t $D$4$MEHM;E$ fME$EEME$E$Umt&E$E~fH$&tbHZE|$$Ft8u&Lt0LJM1HMHQPE111UWVuSd$4$} 4$$EyWEtHE$U1t $D$4$M4$Ee[^_]UU}D$ED$ <$D$E<$D$E<$D$ED$4$}kEP;E$E$U1t$뤍vGGƒ5@@%Ẻ$EGGD$ED$$E$MčUD$L$$MUUD$MML$ MT$E $EMăEUȅUt.8LMLP9u ;UE@TBJE2G$MUUM}EL$ $|$}|$}E$$|$4$}EP;SE$dfE$E8fE$E\fP &ED$BD$B$E$$W1t $D$4$}@t&ME$UEUM$8u_LLQU'1At&t_xE$D$PU볋t1HE$D$}xOH렋Hyx11E1VUWVuSd$4$} 4$$EyWEuxUUti}D$ED$ <$D$E<$D$E<$D$ED$4$}2E$U1t $D$4$M4$Ee[^_]GGƒ9@@)Ẻ$EG GD$ED$$E$D$MĉL$E$MEdMT$EED$ E $UD$EEăUELEȉEt38wLLH;Eu ȋM9G$UU7EM}U@Dx@ $|$D$ ED$M<$MUE$D$E$$M4$L$}EP;E$E$EfEP;YE$E$U1h$Yt&E$EfH&E}U@|ED$GD$G$EG$UE$D$E$$M1Qt $D$4$MvUE$EUt&EE8ucLLAEME1vtbxE$D$wEHM믋t1H E$D$xOH띋Hyx11E1OUWVuSd$4$} 4$$x WupUMMUt[EE}L$D$ D$<$E<$D$E<$D$E!E$U1t $4$D$M4$Ee[^_]G]GUUƒG@@7Ẻ$EG;G}D$D$<$<$D$MĉL$E$MEM|$EED$ E $ED$Mă Eȅ҉Et*:L2LB9u;Et!E@D$E<$D$E$$EP;u]E$EUfME$EEME$EfBZ&t]xE$D$wt&҉A:u1Lt9LAE1xOHBE11E1UWVSd$D$tD$0D$0Pt&'D$xD$,D$<@D$(&D$,|$0L$(T$8ЋT$<t$4vDxT$$9Fl$l$hT$8L$4;|$(;T$,uׁ?@D$08u&D$0D$0P8D$018tڋD$0l$h|$LD$H8|$0G:G|$t:uD$0P@|$Ll$h|$,9|$|@|$|$04F$D$|P@VF w;t$,yv|Wl$h<$T$T$(W;t$,oOGWT$(GOou‹D$0@|$0G?uR|$,L$09}1B9uD$0DŽ|$pD$HGD$LGD$pd$\[^_]t&9L$,tv&D$,|$0T$(L$8ȋL$<t$4vDxL$$9Fl$l$hL$8T$4;|$(tL9L$,uϋD$0?t P9D$0D$pT$0x@D$pd$\[^_]t&9T$,tvv'D$,T$8L$(ЋT$0|$4DT$::increment_slow() [with Node = const btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >; Reference = const std::pair, node::MAP_HOST_DATA>&; Pointer = const std::pair, node::MAP_HOST_DATA>*]void btree::btree_node::insert_value(int, const value_type&) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree_node::value_type = std::pair, node::MAP_HOST_DATA>]void btree::btree_node::split(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree::rebalance_or_split(btree::btree::iterator*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::iterator = btree::btree_iterator, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >, std::pair, node::MAP_HOST_DATA>&, std::pair, node::MAP_HOST_DATA>*>; typename Params::pointer = std::pair, node::MAP_HOST_DATA>*; typename Params::reference = std::pair, node::MAP_HOST_DATA>&]btree::btree::iterator btree::btree::internal_insert(btree::btree::iterator, const value_type&) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::iterator = btree::btree_iterator, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >, std::pair, node::MAP_HOST_DATA>&, std::pair, node::MAP_HOST_DATA>*>; typename Params::pointer = std::pair, node::MAP_HOST_DATA>*; typename Params::reference = std::pair, node::MAP_HOST_DATA>&; btree::btree::value_type = std::pair, node::MAP_HOST_DATA>]void btree::btree_iterator::increment_slow() [with Node = btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >; Reference = std::pair, node::MAP_HOST_DATA>&; Pointer = std::pair, node::MAP_HOST_DATA>*]void btree::btree_node::rebalance_left_to_right(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::rebalance_right_to_left(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::merge(btree::btree_node*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree::delete_internal_node(btree::btree::node_type*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::node_type = btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >]void btree::btree_node::swap(btree::btree_node*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::make_root() [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::remove_value(int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_iterator::decrement_slow() [with Node = btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >; Reference = std::pair, node::MAP_HOST_DATA>&; Pointer = std::pair, node::MAP_HOST_DATA>*]btree::btree::iterator btree::btree::erase(btree::btree::iterator) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::iterator = btree::btree_iterator, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >, std::pair, node::MAP_HOST_DATA>&, std::pair, node::MAP_HOST_DATA>*>; typename Params::pointer = std::pair, node::MAP_HOST_DATA>*; typename Params::reference = std::pair, node::MAP_HOST_DATA>&] i$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,AB BD AAA D 0LjAB ECO AAA C ,yAB BD AAA G <zAC CAOP AA AAD TAC AAO@ AA AAE  AA AAA <HSAA AAOPR AA AAG h[AA AAOPP AA AAA  AA AAB ` AA AAD <AA AAOPG AA AAB <4AA AAOP AA AAB <t$AC AAOP AA AAC <AC AAOP AA AAD lAA AAO@ AA AAA V CA AAD e AF AAB hd_AA AAO0a AA AAH x AA AAD B AA AAB <?AA AAO` AA AAH <AA AAO` AA AAG TPoAA AAO0q AA AAH P AA AAA <dAA AAOP AA AAC T+AA AAOP AA AAH  FA AAC T@-AA AAOp AA AAD  AA AAI ,yAB AElAAA ,AB BD AAA C ,AB BD AAA C ,(AB BD AAA J ,XAAB BD AAA J ,kAB BDx AAA D ,AB BD AAA D ,AB BD AAA D ,7AB BD AAA D THB AA AAOpq AA AAH  AA AAG ,AB EC AAA G ,4AB EC AAA D , AB EC AAA H ,09AB EC AAA F ,`AB C AAA H 04AB BD AAA G $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10MemoryWrap18ReadEmbeddedSourceERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap18ReadEmbeddedSourceERKN2v89ArgumentsE.rodata.str1.1.text.unlikely._ZN4node10MemoryWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node10MemoryWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rodata.str1.4.text.unlikely._ZN4node10MemoryWrap14SetCPUCountMapERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap14SetCPUCountMapERKN2v89ArgumentsE.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE.text.unlikely._ZN4node10MemoryWrap8MapClearEb.rel.text._ZN4node10MemoryWrap8MapClearEb.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEv.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.text.unlikely._ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT_.rel.text._ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT_.text.unlikely._ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ_.rel.text._ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12erase_uniqueERS7_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12erase_uniqueERS7_.text.unlikely._ZN4node10MemoryWrap9MapRemoveERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap9MapRemoveERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap8MapExistERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap8MapExistERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap7MapReadERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap7MapReadERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap6MapGetERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap6MapGetERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap11SourceExistERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap11SourceExistERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap10SourceReadERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap10SourceReadERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap9SourceGetERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap9SourceGetERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap12SourceRemoveERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap12SourceRemoveERKN2v89ArgumentsE.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T_.text.unlikely._ZN4node10MemoryWrap6MapSetERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap6MapSetERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap20SourceSetIfNotExistsERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap20SourceSetIfNotExistsERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap13SourceSetIfEqERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap13SourceSetIfEqERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap19SourceSetIfEqOrNullERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap19SourceSetIfEqOrNullERKN2v89ArgumentsE.text.unlikely._ZN4node10MemoryWrap9SharedSetEPKcS2_j.rel.text._ZN4node10MemoryWrap9SharedSetEPKcS2_j.text.unlikely._ZN4node10MemoryWrap9SourceSetERKN2v89ArgumentsE.rel.text._ZN4node10MemoryWrap9SourceSetERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_memory_wrap.cc.rel.text.startup._GLOBAL__sub_I_memory_wrap.cc.rel.init_array.rodata._ZZN5btree14btree_iteratorIKNS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERKS9_PSE_E14increment_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12insert_valueEiRKS8_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EERKS8_E19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_E19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeISA_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION__.rel.data.rel.node_memory_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group "#%&()o+,./)12-)45b78:;=>@A2|CDdFGIJCpLMOPRSUVXY[\^_abdeghjkmnpqstvwyz|} F     & - 5 > H R g! {' - 3 9 ? E K Q 0W ] c i o eu X{ @ ` &    }       <  `  & 5 C    ( d   # D) U/ x5 ; A dG      M       = a     j"4    y TqA_\YV@4q4t w9z eS7khkb :iz"#&S")w[","/"2$"5"8";_">c?"A"Do"G3d"J+"M-"PRy"S!9Ldr (IB "nKd}7D\i memory_wrap.cc_ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeISA_EEE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorIKNS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERKS9_PSE_E14increment_slowEvE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_E19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_E19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEvE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12insert_valueEiRKS8_E19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EERKS8_E19__PRETTY_FUNCTION___GLOBAL__sub_I_memory_wrap.cc_ZStL8__ioinit.LC1.LC2.LC3.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC17.LC19.LC20.LC22.LC23.LC25.LC27.LC34.LC33.LC32.LC31.LC30.LC29.LC38.LC37.LC39.LC36.LC41.LC45.LC50.LC49.LC48.LC47.LC54.LC52.LC55.LC53.LC57.LC58.LC60.LC61.LC66.LC68.LC70.LC72.LC74.LC76.LC78.LC80.LC82.LC84.LC86.LC88.LC90.LC93_ZN4node10MemoryWrap18ReadEmbeddedSourceERKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node7commons16embedded_source_E_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN4node10MemoryWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node10MemoryWrap14SetCPUCountMapERKN2v89ArgumentsE_ZN4node10MemoryWrap6MapSetERKN2v89ArgumentsE_ZN4node10MemoryWrap6MapGetERKN2v89ArgumentsE_ZN4node10MemoryWrap7MapReadERKN2v89ArgumentsE_ZN4node10MemoryWrap8MapExistERKN2v89ArgumentsE_ZN4node10MemoryWrap9MapRemoveERKN2v89ArgumentsE_ZN4node10MemoryWrap9SourceSetERKN2v89ArgumentsE_ZN4node10MemoryWrap20SourceSetIfNotExistsERKN2v89ArgumentsE_ZN4node10MemoryWrap13SourceSetIfEqERKN2v89ArgumentsE_ZN4node10MemoryWrap19SourceSetIfEqOrNullERKN2v89ArgumentsE_ZN4node10MemoryWrap10SourceReadERKN2v89ArgumentsE_ZN4node10MemoryWrap12SourceRemoveERKN2v89ArgumentsE_ZN4node10MemoryWrap9SourceGetERKN2v89ArgumentsE_ZN4node10MemoryWrap11SourceExistERKN2v89ArgumentsE_ZN2v87Isolate10GetCurrentEv_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZNK2v85Value8IsNumberEv_Z10customLocki_ZN4node7commons8mapCountE_Z12customUnlocki_ZNK2v85Value12IntegerValueEv_Znwj_ZN4node7commons7mapDataE_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE14internal_clearEPNS_10btree_nodeISA_EE_ZNSs4_Rep20_S_empty_rep_storageE_ZdlPv_ZNSs4_Rep10_M_destroyERKSaIcE__assert2_ZN4node10MemoryWrap8MapClearEbfree_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB__ZNSs4swapERSs_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i_ZNSsC1ERKSs_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEv_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEmemcmp_ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT__ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12erase_uniqueERS7__ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEv_ZNSsC1EPKcRKSaIcE_ZN6jxcore8JXStringD1Ev_ZN2v84TrueEv_ZN2v85FalseEv_ZNK2v85Value12BooleanValueEv_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZN6XSpace5StoreEv_ZN6XSpace9LOCKSTOREEv_ZN6XSpace11UNLOCKSTOREEv_ZN6XSpace14ExpirationKickEPKc_ZN6XSpace16ExpirationRemoveEPKc_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T__ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZNK2v85Value8ToObjectEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEvmalloc_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEvstrlen_ZNSs6assignEPKcj_ZN4node10MemoryWrap9SharedSetEPKcS2_j_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_memory_wrap_modulepthread_create  '/Bcu  $,4Bas| u v/5Qcl w x%AS\ yv z1CL {f |!3< }Vw} ~#, Fgm  6W]y   &GRa  '/X p0FRc}1=Wj  Vt#+#[#7N \ jf v &,f&XsW a ak s  a  6[##0' 5 k? O l#0Bs#  l -; E jO W b"[c#p ~ h   h   h   h "( 6 h@ PV d hn ~ bZM## ( g2 BH V g` pv  g   g   g  FDgy#~X#  m   i   i  )c#C#s  j   f   f -3 A fK [ p#P#"#P_  c   b   c  ! c+ ;   d  _  d % ( d2 BP Z dd lz  d  n  # n- =C Q n[ k 9t@X #  o   o* 28 F mP ` $ D$  =e  '/T l~0Dks  )AM^ i j#  '/T l~Pd  B Xdu  Tr#  '/W u  8  ,L 7Ow *#Oj#  '/W u  8  ,L"3 Jg:|##  '/G]iv :_j    ,8L] u  #  '/Oeq~ . 9O     7mt "#G[#  '/La @ep  :u   & 1K_ z##  '/Gh 6[c  !&1 9ER m# DQz#BQ  e  " , b6 >   '/7b zR  7IWjy LX X  ':#`r###%  '/7Xz  q  fq } /v&Gs #MY m #7H#t##  '/7]s   0 5:y&4B[  (7\ l  *QiVe V   #3 J  0 O        # " #J t   #  # % #N   '/7Wm| n   P  5 p  ,DZi#\ -<J> FKV  7C W   #  ^      ## 7 w     #  #  # + #e w # #  #   J v+:U{%2#[j###  '/St /=J ]h px 7c   "  q( 2 :!]  P  L8x $&h(+/T258D:<>@,B\DFHJLLNQSU4WdY[]r)4 )@ )L )X )d )p )| ) ) ) ) ) ) ) ) ) ) ) ) !',z v @*X2zMPj @`*[2 #jy  @h- Z`z  @h.#$W S @.&}S  @/x)  [ @ 0,| !   @0/%P % L @12*k *$ g @25D. P. @3p8 N0 P0 @40; 2I  2_ E @@4p> 3v 3? r @4A 88 @5DkZ=`=o  @6pG>o>d k @7JDC`C+  @70MEuE- q @8PP7JJy @X8 SBJKPK @x8V$O0O @x9Y6Sx St @:P\WXA @;_"B]iP]ke @h=b`` @x>e"vefeb @?hjj7 @Ak mmB  @Bn"w0w @Cq&}v}4r @@Et  @ Gw>9 @Iz: @ @M}6֣z4v @MX F @O8h @PO@|@{ @!@d@!@"@j#)@$)@$@T%@@&@&@2'@'@(p@K)0G) @XOm)D)D)0H()p)p) @pO(l)8@ x jxtimers_wrap.o/1560953073 501 20 100644 67428 ` ELFt4( !#$&'*+-.0134679:<=?@BCEFHIKLNOQRTUWX~UWVuSd$4$tcEĉ$tBUă1t $4$D$M4$Ee[^_]Uă뼍vD$ƃD$Eԉ$tstartWatcherforceCheckKeysparent()->is_root()../src/jx/btree.hnode != root()position >= node->count()position < node->count()parent() == src->parent()src->count() >= count()to_move >= 1to_move <= src->count()parent() == dest->parent()count() >= dest->count()to_move <= count()child(i + 1)->count() == 0position >= 0iter.node->leaf()node_jxtimers_wrapUW}VSd$ĉ<$<$$uD$ D$D$4$Eԃ4$D$EԍT$4$D$EEЃD$ D$EԉD$E$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEЃD$ D$EԉD$E$<$e[^_]Í&UWVSd$ԋD$DL$@pB‰A$L$@I)4ljD$9sf$G9wL$@D$AA QVQ$vAD$DqQ Ad$,[^_]UWVSd$ԋt$@~$F))̓vQ$l$8GFtT$D$T$F$PV$@FFV d$,[^_]Ívnl$)iL$ɉl$9vN+D$+|$9T$D$l$8$|$D$T$T$}&l$8|?$Nʼn+D$L$TF$)ȉl$l$8T$$l$T$~.VF FD$|~$FF t&jtD$l$8|$T$D$D$)$T$뎉D$D$l$l$8$D$T$l$T$>UWVSd$D$`8t d$L[^_]À?D$8@@8x L$AD$`(}}1L$t&E9}jP;T$t狋 Hȅɉl$ D$?D$l$X$l$ 뫍v<$l$XD$`d$L[^_]ÐD$`(,$l$XD$`L$d$L[^_]Ívt$FG GGA GGV-GG G$G(G,VG0G4G8G<G@VGDGHGLGPGTVGXG\G`GdGhV}GlGpGtGxG|VQLJLJLJLJVLJLJLJLJVLJLJLJLJV LJLJLJLJV ~iLJLJLJLJV ~2LJLJLJLJVw9M։T$(l$|$,wDMD$$l$l$ l$X $L$L$l$ A qyD$EQAET$T$AEAEAD$u}UE;L$$u|$,D$w@9D|$TL$ D$p9}^H;L$ t㋳%pljl$$D$?D$l$X $T$,T$,l$$D$(1nfNjD$h9T$|$ T$lvD$@9}NEP9t䋻xƉl$$D$?D$l$X$L$,L$,l$$렋|$ D$8wD$(hmt$99>T$D$(oooo4tEoot o(o(((9L$F9D$(|UL$9t$(|(t$L$xyxAxAxAxA xA~uxA~cxA~QxA~?xA ~- xA ~$xA ~ (xt$pGpWpWpWpW pWpW~qpW~]pW~IpW ~5 pW ~!$pW ~ (pGL$QAWytpD$1xʼnL$E9}JP;T$t狋Hȅɉl$ D$?D$l$X$l$ 뫍vD$`l$X|$;8UD$$jvHL$ HD$ fp~xfHL$ HD$ ufx|$$xD$$Ht$L$(ɉgF    %     $ $$$_((((BD$@l$XD$ D$D$G$D$;D$ D$$node->parent()->child(node->position()) == nodeposition() + 1 == src->position()i + to_move <= src->max_count()position() + 1 == dest->position()!compare_keys(tmp_iter.key(), iter.key())../src/wrappers/jxtimers_wrap.ccUWVSd$L$01>t"yF9tQd$[^_]Í&AV98uv8tAd$[^_]ÍvF8u1V9u>'Q@h9uh}t1yd$[^_]ÐP;tˍl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$|$dD$`t$hW9PD$`W@9tD$`W@9291ҋl$`I EЃL@ 9@@@uˋD$`@D$`@LD$`T$`L$,@L$l,$l$l$Xl$L$,UET$UD$E T$$QD$ D$UQUQ U QUT$AD$ QT$$A DQLD$`L$,@D$`@L$l,$l$l$Xl$L$,UET$UD$E T$$QD$ D$UQUQ U QUT$AD$ QT$$A QOt$hΉ|$d D$`l$X|$`L$ @t$ȍ|<$nGWonD$G onL$ T$o nWo|$l$FV~n;L$hu|$dt$hG9ot$L|$dt$hL$,$l$ l$XL$,l$ D$L$,E u}D$ AUEAT$$T$$EAEAED$ QqAD$dyT$@9||$dt$ht$hf9L$h|gG)ȍDP;tߋqhÍD$?l$X$D$L$L$9L$h}&'D$`t$h8T$`l$`RJhHUJhHhUJhHEUJhH"UJ hHU JhHUJhHUJhHU J hHtwU J hHtXU J $hHt9U $J (hHtU(J ,hHG9xHG9|g1 fo 9|SAyDŽO)9}ɋT$`B(Gd$L[^_]Ít&hupl$XD$ D$D$#$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$UWVSd$|$dD$`9xD$`|$d@W9D$`PD$d@9l$h9T$h1ҋt$dO |$hvFЃL@ 9@@@uˋD$d@x|$|$dD$hlLl$ AD$E$l$XL$,l$ l$L$,Eu}D$ AU EAT$$T$$EAEA E D$ qyAD$Q uD$`l$X|$d@D$`@tD$ht$D|<$NGWOND$G ON T$l$O NWO|$F D$`nl$XV~@|$`+D$htGGt$|<$NGWOND$G ON T$l$O NWO|$F D$`Vn~@|$`+D$hDP;-D$d|$hD$HfD$D$;D$hD$`t$`L$,@L$+D$hD$l,$l$ l$Xl$ L$,E u}D$ AUEAT$$T$$EA E AED$ yQA D$`q|$`@+D$hD$DP;E7p%D$?l$X$D$L$ L$ t&D$`8D$dL$h|$dpxHFǂ* D$hBFzǁ D$hBFzǁ D$hBFzǁ D$hBFzǁj D$hBFzǁ: D$hBFzǁ  D$hBFzǁ D$hBFzǁ D$hBFzǁt~ D$hBFzǁtR D$h zBǁt&t$h񉄏xHǂD$ht$`xV|$|$d&+T$hHT}E@85ED$`yyl$ 1L$D$ @9}fP9t勋'Hȅljl$$D$?D$l$X$l$$멐4$l$XD$`d$L[^_]ÐD$`l$ l$l$X $l$D$`(d$L[^_]ÍvEQF1D$@ A AU9|~9M׉T$  D$R}Lt$$l$(ljL$ |$l$X4$ G WnNFVoO;t$űt$$l$(~E9oIl$$D|$f~ 9}bz;|$t狫jɍT$?l$X<$T$D$,L$(D$,L$(D$ 1pt&l$$E9|t$$LD$E 9}RP;T$t狳)pɉl$(D$?D$l$X$L$,L$,l$(룍vt$$}D$ PD$D$$9ύ9L$D$ oooo<ootjo(o(((tEo8o888t oHoHHH9TL$L$G;D$ WT9|$ L$T$|%T1&rU9~1'jN9ȉ~EUF}ti}1D$E 9}JP;T$t狋Hȅɉl$ D$?D$l$X$l$ 뫍vD$`;(,$l$XRvHL$$HD$$fVF&jl$(jT$(Mfpt$(pD$(fHL$ HD$ ML$ D$T$$t$t&'2HpJ9ut$yl$XD$ D$D$G$EHl$XD$ D$D$;$UWVSd$D$d|$`@9GT$dGR9=GR T@ @@@GGtGt$L $L$L$nAinQD$ in A T$$i QD$nD$ T$T$$iFD$VT$F D$dV1xHΉu&t&D$d@9 Al$,L$ DR T@ @@@At$Dl$X|<$NGWOND$G ON T$WO Nl$OF V|$nPT$;L$ ~l$,-x l$ D$?D$l$XD$L$,$L$,l$ π?D$dWJxHD$dǀxWJxHD$dǀ@bD$dWJxHD$dǀ@)D$dWJxHD$dǀ@D$dWJ xHD$dǀ@D$dW JxHD$dǀ @~D$dWJxHD$dǀ@ED$dWJxHD$dǀ@ D$dWJ xHD$dǀ@D$dWJ xHD$dǀ@ D$dW J $xHD$dǀ @ ~eD$dW$J (xHD$dǀ$@ ~0D$dW(J ,xHD$dǀ(@WDGD$d@WGT$,:D$R|$, WҍL9‰~o΍'~l$X4$D$|$|$ NFVNN~ nNN ~ |$,N N$FVNn$Gt$ 9D$|EP; d$L[^_]Ðt&|$,HzWW9l$,xtJU9|LpJU9XLxJU94LpJU9LxJU9LpJU9LxJU9Lp JU9Lx JU9}^ h JV9}?x |$ 4JWL$ 9}4JW|$,DŽ}D$d@;vxWPt2HD$?l$X$D$1HqpD$D$ D$$l$XD$ D$D$$D$D$ D$$UWVSd$ċL$Xt$TL$4$L$L$9D$Pt89yy1l$A9}ZP;T$t狫!hɍD$/l$H$D$L$L$A9|& $l$Hd$<[^_]Ív,9Qt&ytjq1l$A9}JP;T$t狫hɍD$/l$H$D$L$L$뫍vD$P;Tl$HD$ D$D$;$hl$hD$f,tt&hl$hD$]UWVSd$ԋD$D(uEt$ MVL$L$z|$~9H9L$T$|$pH|79~H|$t |$DO~6~D$+T$,$l$89O׉T$1d$,[^_]ËD$tJV1~ހ|$u`1ɉl$)ȃǍl$84$9O|$D$Dxd$,1[^_]Ívxtut$T$&L$|$D9O|dt&D$DT$PD$@l$l$8t$$D$D0d$,[^_]ÐD$D$@l$l$8$UWVSd$D$hD$$8D$d8 D$/0D$hhD$$8Qt$$UxF9|$$MƋPG9UƋHG9dMƋPG9AUƋHG9MƋPG9UƋHG9MƋPG9U ƋHG9M ƋPG9~sU ƋHG9}TM ƋPG9}5U ƋHG9} PGT$$DŽD$hD$/hD$$@t$$F9}t$$DL ml$ AL$l$X$L$(L$L$iq܋yi܋iAQiiAD$$iiqyiQl$ @9|D$(P;D$hl$XT$h|$dRD$8;T$<HPt$d|$hfB9@"|$4$:t OT$8L$Mt$Pt$XL$Xt&Jj@9uD$Xt$PVD$+T$XHTs1҉~|:qADŽM9~̉VTV@FvD$ǀ>NT$NɍR9ʍD0t$ƍ&V l$H4$T$T$FNVnFD$VNnHT$9ω|P;d$<[^_]fl$zN9}4D$t&'D$D$ ʼnJAN9L$|DŽ vH&jMJ9t7HKD$/l$H$D$2RTHqpȍl$HD$ D$D$$D$D$ D$$D$D$ D$$UWVSd$ċL$Xt$TL$4$L$L$9D$Pt89yy1l$A 9}ZP;T$t狫!hɍD$/l$H$D$ L$L$A9|& $l$Hd$<[^_]ÍvL9Qt&ytjq1l$A 9}JP;T$t狫hɍD$/l$H$D$L$L$뫍vD$P;Tl$HD$ D$D$;$hl$hD$fLtt&hl$hD$]UWVSd$ԋD$D(uEt$ MVL$L$z|$~9H9L$T$|$pH|79 ~H|$t |$DO~6~D$+T$,$l$89O׉T$1d$,[^_]ËD$tJV1 ~ހ|$u`1ɉl$)ȃǍl$84$9O|$D$Dxd$,1[^_]Ívxtut$T$&L$|$D9O|dt&D$DT$PD$@l$l$8t$$D$D0d$,[^_]ÐD$D$@l$l$8$UWVSd$L$01>t"yF9tQd$[^_]Í&AV98uv8tAd$[^_]ÍvF8u1V9u>'Q@h9uh}t1yd$[^_]ÐP;tˍl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$ċ|$XD$8ZD$T8D$PoD$8,T$Eyr9~Ol$D$l$D$D$ƉQBu9t$|ۋl$D$DŽD$oD$pT$FB9T$E|$X @Ǎtt&Nl$Ht$ $t$ FNnVFD$nVNH9||$XD$l$HH;;T$TOD$(;L$,p Lt$TfB9@ "|$4$:t OT$(L$,uȋD$(L$,p9|$tM8t8|$,WT$,H9}%'|$PWD$Pd$<[^_]D$($D$(T$,fD$T$D$TvD$P@묍vOD$8uvP8tpw84v IPT$T$@ iqUыPL$,$l$HD$9ʉT$FʉL$L$T$)хDoD$t$$D$D$PŋHFT$VED$UNFD$TPoD$8phQT$,8tL$,P9PD$($D$(;t:PЅ $D$(D$DmDD$hPrpōl$HD$ D$D$$l$HD$ D$D$$l$HD$ D$D$$D$D$ D$$UWVSd$ċL$\9L$XD$TD$,@D$ &'|$PȉL$(D$XL$ T$,t$$vDxT$$9Fl$l$HL$(u(T$$;|$ x t,;L$XuD$Xd$<[^_]Í&yFD$Xېt&9T$Xtv|$PЉT$(D$XT$ l$,t$$vDxl$l$H$9FωL$T$(u(l$$;|$ x t,;T$XuD$Xd$< @[^_]fyFD$Xېt&9l$XtpT$ &'L$PT$ D$Xl$$l$HDp$9FʋT$,L$T$T$ l$$uP9xNt9l$XuD$X @\D$`l$H|$ D$D$XD$D$TD$D$P$ @ÐyGD$XUWEVS$4$D$XEEEEEEEEEEEM؋UE+EE+ME+UEЉD$E$EEEEEELUE}ȉpU؉lUЉtUԉhUdƉ 9ptL9ltht t$<$;tuҋh9pp@htuddpz}ȋE؋\}ЉlE܉d}ԉTE䉽Pph9p0t f;tt]P9t싋kHȅ΍E$D$;tupp9hgP9h d9\t_\tv9dtCP;tt苻 H̍E$D$9duT9lt\Tt 9ltCP;tt苋= H̍E$D$9luEtG}w}9v2$9wE$ ft=t@EEhpDžlEUt9,L,q9 L?q yqy9p!w 9h}u9 t4$L$uUEuXUtEčE|$T$$UEtUE'19F9>lOEl9E\E\\9ETd?t&d@l\Džp`@t't&;txl pl9ltipdt`lhvDxT$$9FωL$tyFpp9lul?@%d8GdH`H`:tEJ9|E$EUlHqpl9pu.t&;txlHll9ptipd`lhvDtxL$$9F׉T$tylFp9pul?XdMĉ|$TEx$|$EM9P;\\M9EiElE\}Ed}TEPph9p0t f;tt]P9t싋Hȅ΋X$D$;tupp9hgP9hd9\t_\t 9dtFP;tt苻>H̋X$D$9duT9lt_Tt 9ltFP;tt苋H̋X$D$9luEtD}u9v/$9wE$e[^_]Ít&9pl&t&;txnll9ptkpdlhvDtx$9׋`FωT$L$tylFp9pu@l9pu,v;txlll9ptipdt`lhvDxL$$9F׉T$tylFp9pul@@19pu!;txpl;ptspdhȋ`lƋt@DxL$$9F׉T$htylp;pup@;H`H`$pM7X$D$M9p;txrl9ptupdhЋtщlƍ@Dx$9׋`FωT$L$htylp9pu։@$pNH J;2E$EPUHMM\E{9ptjpdlȋ`DtpL$$9F։T$lu);tx#;pup@yGpڋLL$$UE=HyxCHyxE\9l\t&9lH;tt䋻Pȉ $ED$뷋l9\\t9lp;tt䋓bPȋX4$D$봋HyxHyx}Ep}dE\}hETl`9v|ϋl0t ;ttDP9t싋Hȅ΋X$D$;tull9`wT9`\9pu_t&pp9\tFpr9t܋BHPHPCh9duA&hh9dt%hr9t܋t>B;E}u9$9wBxzX4$tD$tdt&BxzX4$tD$tt&p9p;txftwp;ptaplȋ`ЋdǍ@DtpL$$9F։T$ltyO;pup1XL$|$ D$\D$d$ @@Pzx9PJHBX $D$p9du%!&pp9dpr9t؋ztDX4$tD$t11BprHBxzUW1VSd$䋳/>uE~J$D$$atčt&>td$[^_]Ðt&='~u#d~ƃd$[^_]Ð1UWVuSd$ĉ4$}uDEԉ$Uԃ1t $4$D$4$e[^_]UVSd$4$t$D$$d$[^]void btree::btree_iterator::increment_slow() [with Node = btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >; Reference = std::pair, node::MAP_HOST_DATA>&; Pointer = std::pair, node::MAP_HOST_DATA>*]void btree::btree_node::rebalance_left_to_right(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::rebalance_right_to_left(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::merge(btree::btree_node*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree::delete_internal_node(btree::btree::node_type*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::node_type = btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >]void btree::btree_node::make_root() [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::remove_value(int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_iterator::decrement_slow() [with Node = btree::btree_node, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >; Reference = std::pair, node::MAP_HOST_DATA>&; Pointer = std::pair, node::MAP_HOST_DATA>*]btree::btree::iterator btree::btree::erase(btree::btree::iterator) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::iterator = btree::btree_iterator, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >, std::pair, node::MAP_HOST_DATA>&, std::pair, node::MAP_HOST_DATA>*>; typename Params::pointer = std::pair, node::MAP_HOST_DATA>*; typename Params::reference = std::pair, node::MAP_HOST_DATA>&]void btree::btree_iterator::increment_slow() [with Node = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >; Reference = std::pair, ttlTimer>&; Pointer = std::pair, ttlTimer>*]void btree::btree_node::rebalance_left_to_right(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::rebalance_right_to_left(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::merge(btree::btree_node*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree::delete_internal_node(btree::btree::node_type*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::node_type = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >]void btree::btree_node::make_root() [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::remove_value(int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_iterator::decrement_slow() [with Node = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >; Reference = std::pair, ttlTimer>&; Pointer = std::pair, ttlTimer>*]btree::btree::iterator btree::btree::erase(btree::btree::iterator) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::iterator = btree::btree_iterator, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >, std::pair, ttlTimer>&, std::pair, ttlTimer>*>; typename Params::pointer = std::pair, ttlTimer>*; typename Params::reference = std::pair, ttlTimer>&] ]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,AB BDx AAA D 0LRAB AE4 AAA H (AG CAAA < AA AAO@e AA AAD h# AA AAO`P AA AAA  AA AAB ` AA AAD hX_AA AAO0a AA AAH x AA AAD B AA AAB <AA AAO` AA AAE <AA AAO` AA AAB hDAA AAO`P AA AAA  AA AAB h AA AAD <AC AAO` AA AAF <AC AAOP AA AAD l0AA AAO@ AA AAA V CA AAD e AF AAB <AA AAO` AA AAC <AA AAOPG AA AAB < AA AAOP AA AAB <`$AC AAOP AA AAC <AC AAOP AA AAD lAA AAO@ AA AAA V CA AAD e AF AAB hP_AA AAO0a AA AAH x AA AAD B AA AAB <AA AAOP AA AAC T+AA AAOP AA AAH  FA AAC ,TAB Fw AAA E <AB ADg AAA F s AAA B ,wAB BD` AAA D $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node12JXTimersWrap12StartWatcherERKN2v89ArgumentsE.rel.text._ZN4node12JXTimersWrap12StartWatcherERKN2v89ArgumentsE.rodata.str1.1.text.unlikely._ZN4node12JXTimersWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node12JXTimersWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZNSt11_Deque_baseISsSaISsEE17_M_initialize_mapEj.rel.text._ZNSt11_Deque_baseISsSaISsEE17_M_initialize_mapEj.text.unlikely._ZNSt5dequeISsSaISsEE16_M_push_back_auxERKSs.rel.text._ZNSt5dequeISsSaISsEE16_M_push_back_auxERKSs.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv.rodata.str1.4.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.text.unlikely._ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT_.rel.text._ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT_.text.unlikely._ZN4node12JXTimersWrap9checkKeysEv.rel.text._ZN4node12JXTimersWrap9checkKeysEv.text.unlikely._ZN4node12JXTimersWrap7WatcherEPv.rel.text._ZN4node12JXTimersWrap7WatcherEPv.text.unlikely._ZN4node12JXTimersWrap14ForceCheckKeysERKN2v89ArgumentsE.rel.text._ZN4node12JXTimersWrap14ForceCheckKeysERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_jxtimers_wrap.cc.rel.text.startup._GLOBAL__sub_I_jxtimers_wrap.cc.rel.init_array.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_E19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeISA_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_E19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeIS9_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION__.rel.data.rel.node_jxtimers_wrap_module.bss._ZN4nodeL14watcher_alive_E.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group| !#$&'-vu)*+Lq-.s01r34ml67Utw9:<=?@\xyBC)jEFN)iHInkKLNOQR hTU ow ppWXZ[]^`acd. FdN }fhijklmnopqrstuvwxyz|}~] b g l 0q Bv )| Q k T)    0)   t)   " = K )       ~) ? W p      , ^N _ R"   Jrwa )"![a "$# "'*Lkz_"+"."1"4"7":m"="@"C8"F$"I:"L"Oz_"R"U+"Xr[1Npwz* jxtimers_wrap.cc_ZN4nodeL14watcher_alive_E_ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeIS9_EEE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEvE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeISA_EEE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_E19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB_E19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEvE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14decrement_slowEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION___GLOBAL__sub_I_jxtimers_wrap.cc_ZStL8__ioinit.LC1.LC2.LC6.LC7.LC8.LC11.LC10.LC12.LC19.LC18.LC17.LC16.LC15.LC14.LC23.LC22.LC24.LC21.LC27.LC31.LC32.LC33_ZN4node12JXTimersWrap12StartWatcherERKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN6XSpace10LOCKTIMERSEv_ZN6XSpace12UNLOCKTIMERSEv_ZN2v84TrueEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_ZN2v85FalseEv_ZN4node12JXTimersWrap7WatcherEPvuv_thread_create_ZN4node12JXTimersWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node12JXTimersWrap14ForceCheckKeysERKN2v89ArgumentsE_ZN2v87Isolate10GetCurrentEv_ZNSt11_Deque_baseISsSaISsEE17_M_initialize_mapEj_Znwj_ZNSt5dequeISsSaISsEE16_M_push_back_auxERKSs_ZNSsC1ERKSsmemmove_ZdlPv_ZSt17__throw_bad_allocv_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv_ZNSs4_Rep20_S_empty_rep_storageE_ZNSs4_Rep10_M_destroyERKSaIcE_ZNSs4swapERSs__assert2_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE10try_shrinkEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEmemcmp_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5mergeEPSB__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE11merge_nodesEPNS_10btree_nodeISA_EESE__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS4_EELi256EEEEERS9_PS9_E14increment_slowEv_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT__ZN4node12JXTimersWrap9checkKeysEv_ZN6XSpace6TimersEvuv_hrtime_ZN4node7commons15process_status_E_ZN6XSpace9LOCKSTOREEv_ZN6XSpace5StoreEv_ZN6XSpace11UNLOCKSTOREEv_ZN6XSpace9SetHasKeyEb_ZN4node7commons9GetMaxCPUEv_ZN4node7commons13CheckCPUUsageExusleep_ZN4node7commons16CheckMemoryLimitEv_ZN6XSpace9GetHasKeyEv_ZN2v89UndefinedEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_jxtimers_wrap_modulepthread_create  # b(. b6G]iv b  $,:Ykt g h -5I  ;k ;UU l2i >r( S    i ] j  k \ j  l X j m X j-3 nA XK j[ hx(ks o Z j(. p< ZF jV\ qj Zt j r Z j s Z j t Z j r!Ye u  Y j$* v8 YB jRX wf Yp j q Y j x Y j eACwIs i T j k S j F,x / t9 [C jKQ y_ ^i jy s [ j )cCs k \ j  V y ^ j,2 z@ _J jZ` {n `x j | ` j b"[cp o~ Q j p Q j q Q j r Q j"( s6 Q@ jPV td Qn j~ bZM u( P2 jBH vV P` jpv w P j q P j x P j FDgy~X y U j s R j t R j  )cCs k S j  l O j m O j-3 nA OK j[ 9t@X 1  y U$ j4: zH VR jbh {v W j | W j $  sWNx 2Fz 7a~j8VS     % i x   p   y    ^&KYV3n ?P  &>JOTay b  $3IU_q  c( 2:K  P  \H"&4(*.$1d48:T<?CXEGIK d$4 $@ $L $X $d $p $| $ $ $ $ $ $ $ $ $ $ $ $  $ $$,!,',,,v0r @,x2papR @W  @< !  @\P$G#  @'.2=_  @p+t@@  @.R`  @1@%%@% ! @ 4*,@,  @74 4 @p: 6^ 6Z @0= 8 8 @L@I z? ? @,Cx D D  @<FI1 I$ - @DIDMNPMJ @ pLNOPO @|0O`Q Q_  @pRRdR ` @U >W@W+  @0XlYY  @,h[lm/pm+ @p^W$n0nw @HannF @L8dGnC @fSo@p)@r)@b@s@t@v@Aw@y@zp@V@~@@@@> @ @l!@!@"@2#@@#X# @z $l,$l@$l\$0p(e$y$,u$ @ē$P  9timer_wrap.o/ 1560953070 501 20 100644 15964 ` ELF444(A> 39USd$싓D$ R$d$[]UVSd$t$ @4$4$d$[^]UWVSd$ExE؉EW$UUD$uċE 4$UD$EăEԋG4$D$UEċ4$ET$UԋET$UD$D$T$ G4$D$E$e[^_]Ít&UUXUWVuSd$4$}4$$xtGEԉ$Uԃ1t $4$D$4$e[^_]t&E$E$UċUĉEEmx$\$Eԃ둍&؃TimercloserefunrefstartstopsetRepeatgetRepeatagainnow../src/wrappers/timer_wrap.ccnode_timer_wrapUWEVǍuSd$$E<$$D$ D$4$T$E}ԃ4$|$UԃD$$D$4$D$EUԃ<$T$EȅE$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$|$4$Ẽ4$D$D$}Eԃ|$D$ D$E$EЉ$e[^_]Ð%TimerWrap: Aborting due to unwrap failure at %s:%d UW}VSd$u <$PMJyD$ $EċUąEFFMԉM$E~UF$D$ET$UD$T$ D$Eă$t0MčEȋQ$T$EȃỦ$T$Et$D$E$Eԃ<$D$M<$Ee[^_]t&B tQPzuP@Et&E$EԃfEԉ$EEԃ&ED$ D$D$$UWVuSd$4$E P8J}ȀytrD$ $DžG$x^MȍỦD$$L$Ẽ4$D$}4$Ee[^_]t&J tPAxuOyfWMЉEċ $T$EЃUԉD$T$W$EcDD$ ID$D$$UWVuSd$4$E PMȋJyD$ $DžG$t:OUЉEċ$L$EЃUԉD$T$W$Eċ}ȍỦD$$|$Ẽ4$D$M4$Ee[^_]R tBxuzN&@D$ (D$D$$UWVuSd$4$E PMȋJyD$ $DžG$t:OUЉEċ$L$EЃUԉD$T$W$Eċ}ȍỦD$$|$Ẽ4$D$M4$Ee[^_]R tBxuzN&@D$ 3D$D$$UW}VSd$ĉ<$E PMЋJyD$ $ƅE @E MԉM̋@$T$D$4$ED$D$Ẻ$Eԃ<$D$U<$Ee[^_]r hFxu(vWEԉ$EEԃ`&D$ >D$D$$UWVSd$t$0D$44$~D$|$@|$F$v$d$[^_]UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE Uԋ@$D$}ԃ$l$|$|$4$MUVSd$4$t$D$$d$[^] ?]_$GCC: (GNU) 4.9.x 20150123 (prerelease)zR|  1AB AkA $@;AB BsAA ,hAB C AAA E ,AB BDm AAA G 0AB EF} AAA B 0AB AE, AAA H ,09AB BD AAA G ,`AAB BD AAA I ,AAB BD AAA I ,IAB AE AAA I (\AB CRAAA ,AB BDn AAA F $LFAB B~AA t.symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node9TimerWrapD2Ev.rel.text._ZN4node9TimerWrapD2Ev.text.unlikely._ZN4node9TimerWrapD0Ev.rel.text._ZN4node9TimerWrapD0Ev.text.unlikely._ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si.rel.text._ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si.text.unlikely._ZN4node9TimerWrap3NowERKN2v89ArgumentsE.rel.text._ZN4node9TimerWrap3NowERKN2v89ArgumentsE.rodata.str1.1.text.unlikely._ZN4node9TimerWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node9TimerWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rodata.str1.4.text.unlikely._ZN4node9TimerWrap5StartERKN2v89ArgumentsE.rel.text._ZN4node9TimerWrap5StartERKN2v89ArgumentsE.text.unlikely._ZN4node9TimerWrap9GetRepeatERKN2v89ArgumentsE.rel.text._ZN4node9TimerWrap9GetRepeatERKN2v89ArgumentsE.text.unlikely._ZN4node9TimerWrap4StopERKN2v89ArgumentsE.rel.text._ZN4node9TimerWrap4StopERKN2v89ArgumentsE.text.unlikely._ZN4node9TimerWrap5AgainERKN2v89ArgumentsE.rel.text._ZN4node9TimerWrap5AgainERKN2v89ArgumentsE.text.unlikely._ZN4node9TimerWrap9SetRepeatERKN2v89ArgumentsE.rel.text._ZN4node9TimerWrap9SetRepeatERKN2v89ArgumentsE.text.unlikely._ZN4node9TimerWrapC2EN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node9TimerWrapC2EN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node9TimerWrap3NewERKN2v89ArgumentsE.rel.text._ZN4node9TimerWrap3NewERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_timer_wrap.cc.rel.text.startup._GLOBAL__sub_I_timer_wrap.cc.rel.init_array.rel.data.rel.ro._ZTVN4node9TimerWrapE.rel.data.rel.node_timer_wrap_module.bss._ZStL8__ioinit.rodata.cst4.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    "#%&()+,./F/,7135789;<;8@EJ OTY_!e+k5q;w?}:1" 9!3 1" #;" :Am?Wt5ix",VLy&S~A I&9A#1Y %,4:N{\) * \)Z ` x     5timer_wrap.cc_GLOBAL__sub_I_timer_wrap.cc_ZStL8__ioinit.LC3.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC16.LC17_ZN4node9TimerWrapD5Ev_ZN4node9TimerWrapD2Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZTVN4node9TimerWrapE_ZN4node10HandleWrapD2Ev_ZN4node9TimerWrapD1Ev_ZN4node9TimerWrapD0Ev_ZdlPv_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si_ZN2v811HandleScopeC1Ev_ZN2v87Integer3NewEiPNS_7IsolateE_ZNK2v85Value8ToObjectEv_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN2v811HandleScopeD1Ev_ZN2v87Isolate10GetCurrentEv_ZN4node9TimerWrap3NowERKN2v89ArgumentsE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectEuv_update_timeuv_now_ZN2v86Number3NewEd_ZN4node9TimerWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node9TimerWrap3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN4node9TimerWrap5StartERKN2v89ArgumentsE_ZN4node9TimerWrap4StopERKN2v89ArgumentsE_ZN4node9TimerWrap9SetRepeatERKN2v89ArgumentsE_ZN4node9TimerWrap9GetRepeatERKN2v89ArgumentsE_ZN4node9TimerWrap5AgainERKN2v89ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZNK2v85Value12IntegerValueEvuv_timer_startuv_last_error_ZN4node8SetErrnoE8uv_err_sstderrfprintfabortuv_timer_get_repeat_ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_suv_timer_stopuv_timer_againuv_timer_set_repeat_ZN4node9TimerWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_suv_timer_init_ZN4node9TimerWrapC1EN2v86HandleINS1_6ObjectEEE_Znwj_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10HandleWrap9SetHandleEP11uv_handle_snode_timer_wrap_module? @A&B? @A'B/E? @+GUHmIJKLM ? @G'O/P@QVRbSlLTUV +? @$G,O4P:XYYkZ[ ,\]^_Y - \ `DaJbfYu .\`acY /\`@aFdbYq 0\`aeY 1\`<aBf^Ym 2\`agY 3\`8a>hZYi 4}\`aNYi 5 \.a:iW\xjLM ? @GIksllFmno HS*LgQQ 6 7pqr ? @GEkZstHSLnt 6 7&p0q5r ? @GIk^u}ntHSL 6$ 7.p8q=r ? @GIk^v}ntHSL 6$ 7.p8q=r ? @GIkxlwHSLQ" 6, 76p@qEr? @,y2ALz ? @G$O,P=QSR_SlLI|{S? @ &}( ~2: C D W Dl  4d P x(y4?8yH ?WyT?Ay\??d!d'd,dVp1R @ - ? s; @,-(?  @T-H?+gc @-h?2m%0 @.@?224A  { @D0?  9 @0x?' d A` @\1x? b p A @1x?#EIA @L2x?&z \ @2(?)l/p+ @2h?,^9@F @T38?/ @3?1 @3?3 @3?5)6R0([ok @3p?<l0@> # node_os.o/ 1560953071 501 20 100644 17908 ` ELF =4(96%&1LEgethostnameunameusernicesysidleirqmodelspeedtimesUV_ENOSYSjxcore-log!UV_OKuv_interface_addressesIPv4IPv6addressfamilyinternalgetEndiannessgetHostnamegetLoadAvggetUptimegetTotalMemgetFreeMemgetCPUsgetOSTypegetOSReleasegetInterfaceAddresses../src/wrappers/node_os.ccnode_osUWVuSd$ĉ4$}4$$U xEԋtE$Uԃ1t $4$D$4$e[^_]t&$D$ T$L$EԃUWVuS$d4$4$$U x:tHE$U1t $D$4$}4$Ee[^_]D$AM $MMtS}L$ D$L$<$D$E<$D$Emt&L$ED$ |$$EE4$D$M?UWVPS$$4$4$$U x:tMD$D1t $D$4$}4$Ee[^_]b $@@x*D$ DL$|$$D듐DL$ D$L$<$D$D<$D$D4$D$M:UWVPS$$4$4$$U x:tMD$D1t $D$4$M4$Ee[^_]b$xFD|$L$D$ $D4$D$}뙍DL$ D$L$<$D$D<$D$D*UWEVS$d$E<$$U x MDUԍET$UЉ$T$EEuD$4$D$EăEEԅEtEEEEE|xRf4$\$UtD$ 4$D$E}ĉD$EăD$ |$D$E$UBj4$\$UED$ 4$D$E}ĉD$Eă|$D$ D$E$Uzj34$\$UED$ 4$D$E}ĉD$EăD$ |$D$E$UJ$j 4$\$UED$ 4$D$E}ĉD$EăD$ |$D$E$UB,j(I4$\$UED$ 4$D$E}ĉD$MEĉ|$ $D$ D$4$UD$ }ċ4$UD$ED$EăUD$ EE4$T$D$ED$ <$D$EĉD$U*B4$D$Eă|D$ EE4$T$D$ED$ <$D$EĉD$xED$ 4$T$D$MED$ L$<$D$E4$D$ED$MED$ $|$D$EԃEM9E4$@UЉUEăUEB j؃tt&Eĉ$Uă1t $D$E$ME$Ee[^_]v؃t&؃7t&؃t&؃Mt&D$EЉ$EzUWVuSd$4$}4$$xtGEԉ$Uԃ1t $4$D$4$e[^_]t&UċUĉEEmx$\$Eԃ뮍t&؃UWVuSd$4$}4$$xtGEԉ$Uԃ1t $4$D$4$e[^_]t&UċUĉEEmx$\$Eԃ뮍t&؃UWVuSd$4$}4$$xtGEĉ$Uă1t $4$D$4$e[^_]t&EUЉT$$UEąuEЉ$D$EăUWVuSd$4$4$$U x MtHE$U1t $D$4$U4$Ee[^_]EЍ}$E<$D$D$MEЉ<$D$ME<$D$EED$EMD$ D$E $D$E؉<$D$E<$D$EED$EMD$ D$E $D$E<$D$E<$D$EED$E}D$ D$E<$D$|$4$}UWEVS$4$X4$$U x2utUE$U1t $D$X$}X$Ee[^_]fUET$U$uT$}4$E#p1YE}d`\TDž|E$t\D$ <$D$ED$tUD$ D$E$D$x$MD$<$L$EUD$ D$xT$$E||9|UD$  <$tD$ED$UpT$$UUpT$<$D$ExtEPff FFFF F$F(TfF,D$ D$E<$D$E<$hMED$ L$t$<$EdMET$D$ <$L$llD$ D$ED$E$`MD$ <$T$L$EhD$ D$EL$$EtD<$6E619t&E<$D$D$UEUD$ xD$pT$$t&D$.t$$D$ iD$.t$$D$ 9D$E$pD$X$uz&$D$D$p1t&$D$D$D$D$ |$4$D$E4$D$EUWEVSd$ĉ$}E4$$uD$ D$D$4$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$Eԃ4$D$T$EẼ<$D$ D$EԉD$EЉ$e[^_]f.UVSd$4$t$D$$d$[^] 4_$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,AB BDt AAA H ,L3AB BDx AAA D ,|AAB BG~ AAA C ,@AB BG~ AAA C 07AB EC AAA F ,AB BDm AAA G ,@AB BDm AAA G ,pAB BDm AAA G ,AB BDx AAA D ,AB EC AAA E 0AB EC AAA C $4FAB B~AA \.symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.text.unlikely._ZN4node2OS13GetEndiannessERKN2v89ArgumentsE.rel.text._ZN4node2OS13GetEndiannessERKN2v89ArgumentsE.text.unlikely._ZN4node2OS11GetHostnameERKN2v89ArgumentsE.rel.text._ZN4node2OS11GetHostnameERKN2v89ArgumentsE.text.unlikely._ZN4node2OS9GetOSTypeERKN2v89ArgumentsE.rel.text._ZN4node2OS9GetOSTypeERKN2v89ArgumentsE.text.unlikely._ZN4node2OS12GetOSReleaseERKN2v89ArgumentsE.rel.text._ZN4node2OS12GetOSReleaseERKN2v89ArgumentsE.text.unlikely._ZN4node2OS10GetCPUInfoERKN2v89ArgumentsE.rel.text._ZN4node2OS10GetCPUInfoERKN2v89ArgumentsE.text.unlikely._ZN4node2OS13GetFreeMemoryERKN2v89ArgumentsE.rel.text._ZN4node2OS13GetFreeMemoryERKN2v89ArgumentsE.text.unlikely._ZN4node2OS14GetTotalMemoryERKN2v89ArgumentsE.rel.text._ZN4node2OS14GetTotalMemoryERKN2v89ArgumentsE.text.unlikely._ZN4node2OS9GetUptimeERKN2v89ArgumentsE.rel.text._ZN4node2OS9GetUptimeERKN2v89ArgumentsE.text.unlikely._ZN4node2OS10GetLoadAvgERKN2v89ArgumentsE.rel.text._ZN4node2OS10GetLoadAvgERKN2v89ArgumentsE.text.unlikely._ZN4node2OS21GetInterfaceAddressesERKN2v89ArgumentsE.rel.text._ZN4node2OS21GetInterfaceAddressesERKN2v89ArgumentsE.text.unlikely._ZN4node2OS10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node2OS10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._GLOBAL__sub_I_node_os.cc.rel.text.startup._GLOBAL__sub_I_node_os.cc.rel.init_array.rel.data.rel.node_os_module.bss._ZStL8__ioinit.rodata.cst4.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    "#%&() F)&/+-/01345:?DINT Z$`)f-l3r9x0}|wr?IT[2"18Nf2Jn3 A(.@Z7>O| -8#m %AUv"& 1Nk-node_os.cc_GLOBAL__sub_I_node_os.cc_ZStL8__ioinit.LC0.LC2.LC3.LC5.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC8.LC29.LC30.LC31.LC28.LC27.LC26.LC22.LC23.LC24.LC25.LC33.LC34.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42_ZN4node2OS13GetEndiannessERKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_ZN2v86String3NewEPNS_7IsolateEPKci_ZN4node2OS11GetHostnameERKN2v89ArgumentsEgethostname__errno_ZN4node14ErrnoExceptionEiPKcS1_S1__ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN4node2OS9GetOSTypeERKN2v89ArgumentsEuname_ZN4node2OS12GetOSReleaseERKN2v89ArgumentsE_ZN4node2OS10GetCPUInfoERKN2v89ArgumentsEuv_cpu_info_ZN2v85Array3NewEPNS_7IsolateEi_ZN2v86Number3NewEd_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v86Object3NewEv_ZN2v87Integer3NewEiPNS_7IsolateEuv_free_cpu_info_ZN4node2OS13GetFreeMemoryERKN2v89ArgumentsEuv_get_free_memory_ZN4node2OS14GetTotalMemoryERKN2v89ArgumentsEuv_get_total_memory_ZN4node2OS9GetUptimeERKN2v89ArgumentsEuv_uptime_ZN4node2OS10GetLoadAvgERKN2v89ArgumentsEuv_loadavg_ZN4node2OS21GetInterfaceAddressesERKN2v89ArgumentsEuv_interface_addresses_ZN2v84TrueEv_ZNK2v85Array6LengthEv_ZN2v86Object3HasENS_6HandleINS_6StringEEE_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN2v85FalseEvuv_ip6_nameuv_ip4_nameuv_free_interface_addresses__android_log_print_ZN4node11UVExceptionEiPKcS1_S1__ZN4node2OS10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN2v87Isolate10GetCurrentEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_os_module L MN'O/PGQ]RiSsT 'U L MN'O/PGQ]RiSvTWX ( )YZU%S L M"N*O2PMQfRrST\UX ( * YZ3S L M"N*O2PMQfRrST\USX ( *Y.Z L M$N,O4Pa_` + , - . / 0 1 2 a2USbsaUbaUb=aaUbaUbcU?U`bvaUbUbd:bcc 3QRST 3 3 3 3+e L MN'O/P@QVRbSlTga 3 L MN'O/P@QVRbSlTia 3 L MN'O/P@QVRbSlTka L MN$O,PGQ]RiSvTm`ad ba<d`bsadbS L M'N/O7PRQhRzSToc 4 5 6 7ApYRUbqdb>UYrzsU.cRUUbUb t>`kbu 8v 9wS :# ;,xI <S ;\xj =yZ L M$N,O4PBKa{s|| >}bV{| ?}/b5lQ{c|l @}bj{| A}b%hA{S|\ Bv}bf{| C}b^1{C|L Df}b[{| E}b]!{3|< FV}wb}n{| G}bT ~L M "( 2: z P   Dt8`$ 4 7z @7LH!H'H,2H<;{w @T3X7>@3 @37 tXAT @447@ @47470 @D57dH P  @6`7   @D7`7L   @7X7   @77 "bjpf @87#  @4:7&$2Q@FM @L<87)}y @<7+ @<7-0(l @<h74<P#@8K +cares_wrap.o/ 1560953074 501 20 100644 84488 ` ELF(4(,)56789:;<FGIJLMOPRSUVXY[\^_abdeghyz  $11(UNKNOWN)ENODATAEFORMERRESERVFAILENOTFOUNDENOTIMPEREFUSEDEBADQUERYEBADNAMEEBADFAMILYEBADRESPECONNREFUSEDETIMEOUTEOFEFILEENOMEMEDESTRUCTIONEBADSTREBADFLAGSENONAMEEBADHINTSENOTINITIALIZEDELOADIPHLPAPIEADDRGETNETWORKPARAMSECANCELLEDSUCCESSqueryAqueryAaaaqueryCnamequeryMxqueryNsqueryTxtquerySrvqueryNaptrgetHostByAddrgetHostByNamegetaddrinfoisIPAF_INETAF_INET6AF_UNSPECflagsserviceregexpreplacementorderpreferencereq_.data == this../src/jx/commons.hdomainexchangeprioritynameportweight../src/wrappers/cares_wrap.ccnode_cares_wrapUWǍEVSd$ĉ$E4$$t4 䐍v'D$ Mԉ|$D$ $M,MЋ}ԉD$ $M1tMЉ$MЉ|$L$D$ $Ẻ$e[^_]Ímt&]t&Mt&=t&-t&t& t&t&t&t&t&t&t&t&t&}t&mt&]t&Mt&=t&-t&t& MԍD$ &UWEVS$t$uE<$$[E$}UU1}}E؋|$}D$E܍$EUUB|D$$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$<$D$ D$D$E<$D$ET$<$D$EE4$D$ D$ED$E<$D$D$E<$D$ EET$D$E4$D$ D$ED$E<$D$ D$E<$D$ EET$D$E4$D$ D$ED$E<$D$D$E<$D$ EET$D$E4$D$ D$ED$E$e[^_]Ít&EUEUSd$T$0T$T$ T$8T$T$4T$$d$$1[]UWVSd$ԋuV@tfF}<$U܉D$U܃E䋒<$ET$UET$$Ft$e[^_]Í&UUUWVuSd$U ljt$ ED$T$$EMЃE̅t3M $t$ D$ L$UЃtIe[^_]ÐMt$T$ L$D$L$$e1[^_]Ð UWEVS$t$E<$$EED$ED$E $u}D$<$t$Et$D$ E<$D$Et$D$ E<$D$Et$D$ E<$D$Et$D$ E<$D$Et$D$ E<$D$Et$D$ E<$D$uEE1<$UED$ MEFL$<$D$EUD$ D$ET$$D$ MF<$L$D$EUD$ D$ET$$D$ MF <$L$D$EUD$ D$ET$$D$ MF<$L$D$EUD$ D$ET$$ML$F<$D$EUD$ D$ET$$ML$F<$D$EUD$ D$ET$$UM<$T$BL$EEMD$ D$E $D$6U!E$u4$EHbD$D$<$MEEEEċE@<$D$ME<$ET$UEMT$UD$D$L$T$ <$4$E$e[^_]Ít&u4$EPD$}D$<$UEEE@<$D$UE<$EL$MEUL$MD$D$T$L$ 3t&EDMI1f}WHUSd$T$0D$ #D$T$T$T$4T$$d$$1[]USd$T$0D$ !D$T$T$T$4T$$d$$1[]USd$T$0D$ D$T$T$T$4T$$d$$1[]USd$T$0D$ D$T$T$T$4T$$d$$1[]USd$T$0D$ D$T$T$T$4T$$d$$1[]USd$T$0D$ D$T$T$T$4T$$d$$1[]USd$T$0D$ D$T$T$T$4T$$d$$1[]USd$T$0D$ D$T$T$T$4T$$d$$1[]USd$D$ (t $l$d$[]UWVSd$t$8Nj@|$D$4xMtD$0HuL$D$$d$[^_]ËD$0@؍&D$0@D$D$$USd$D$D$$d$[]UWVSd$t$dǍ@XT$0D$4 &@pt;p$|@tuD$h D$lG|$$D$`U(u$l$4E l$XT$t$$T$,T$,l$4GX|$0D$,}$Hp;x$|~$Ht名t&p L$hP( L$lt::~ReqWrap() [with T = uv_getaddrinfo_s] 7$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0DX0lAB AFC AAA G 0AB EC AAA E QAB AKA ,AB C AAA H <(AB BDr AAA B { AAA B 0h,AB EC= AAA E YAB ASA  YAB ASA  YAB ASA  YAB ASA  ,YAB ASA  PYAB ASA  tYAB ASA  YAB ASA (-AA O Y AA,AB Cf AAA A =AB AwA << AC AAO`G AA AAA ,|{AB Cd AAA A 0hAB EC7 AAA C 0$AB AD  AAA A 04AB EC5 AAA E ,HAB BDx AAA D ,xqAB EC AAA F ,AB C AAA H ,AB C AAA H ,AB C AAA H ,8AB C AAA H ,hAB C AAA H ,AB C AAA H ,AB C AAA H ,AB C AAA H ,(AB C AAA H ,XAB C AAA H ,AB C AAA H ,AB C AAA H ,AB C AAA H ,AB C AAA H ,HAB C AAA H ,xAB C AAA H ,AB C AAA H ,AB C AAA H ,AB C AAA H ,8AB C AAA H ,hAB C AAA H ,AB ED AAA A <AB C AAA E b AAA C < AB C AAA E [ AAA B 0H AB AE AAA G 0| AB AE AAA G 0 AB AE AAA G 0 AB AE AAA G 0 AB AE AAA G 0L AB AE AAA G 0 AB AE AAA G 0 AB AE AAA G 0 AB AE AAA G , AB EC AAA H ,L AB F AAA H ,| AB F3 AAA A , AB F3 AAA A 0 AB EC AAA G 0 AB EC AAA D 0D AB EC AAA F 0x GAB ECR AAA H $ FAB B~AA  .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10cares_wrap9QueryWrap4SendEPKc.text._ZN4node10cares_wrap9QueryWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap9QueryWrap4SendEPKci.text._ZN4node10cares_wrap9QueryWrap4SendEPKci.text.unlikely._ZN4node10cares_wrap9QueryWrap5ParseEPhi.text._ZN4node10cares_wrap9QueryWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap9QueryWrap5ParseEP7hostent.text._ZN4node10cares_wrap9QueryWrap5ParseEP7hostent.rodata.str1.1.text.unlikely._ZN4node10cares_wrapL12SetAresErrnoEi.rel.text._ZN4node10cares_wrapL12SetAresErrnoEi.rel.rodata._ZN4node10cares_wrapL12SetAresErrnoEi.text.unlikely._ZN4node10cares_wrapL10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node10cares_wrapL10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node10cares_wrap17GetHostByNameWrap4SendEPKci.rel.text._ZN4node10cares_wrap17GetHostByNameWrap4SendEPKci.text.unlikely._ZN4node10cares_wrap9QueryWrapD2Ev.rel.text._ZN4node10cares_wrap9QueryWrapD2Ev.text.unlikely._ZN4node10cares_wrap17GetHostByAddrWrap4SendEPKc.rel.text._ZN4node10cares_wrap17GetHostByAddrWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap14QueryNaptrWrap5ParseEPhi.rel.text._ZN4node10cares_wrap14QueryNaptrWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap14QueryNaptrWrap4SendEPKc.rel.text._ZN4node10cares_wrap14QueryNaptrWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap12QuerySrvWrap4SendEPKc.rel.text._ZN4node10cares_wrap12QuerySrvWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap12QueryTxtWrap4SendEPKc.rel.text._ZN4node10cares_wrap12QueryTxtWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap11QueryNsWrap4SendEPKc.rel.text._ZN4node10cares_wrap11QueryNsWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap11QueryMxWrap4SendEPKc.rel.text._ZN4node10cares_wrap11QueryMxWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap14QueryCnameWrap4SendEPKc.rel.text._ZN4node10cares_wrap14QueryCnameWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap13QueryAaaaWrap4SendEPKc.rel.text._ZN4node10cares_wrap13QueryAaaaWrap4SendEPKc.text.unlikely._ZN4node10cares_wrap10QueryAWrap4SendEPKc.rel.text._ZN4node10cares_wrap10QueryAWrap4SendEPKc.text.unlikely._ZN4node10cares_wrapL18ares_poll_close_cbEP11uv_handle_s.rel.text._ZN4node10cares_wrapL18ares_poll_close_cbEP11uv_handle_s.text.unlikely._ZN4node10cares_wrapL12ares_poll_cbEP9uv_poll_sii.rel.text._ZN4node10cares_wrapL12ares_poll_cbEP9uv_poll_sii.text.unlikely._ZN4node10cares_wrapL12ares_timeoutEP10uv_timer_si.rel.text._ZN4node10cares_wrapL12ares_timeoutEP10uv_timer_si.text.unlikely._ZN4node10cares_wrapL17ares_sockstate_cbEPviii.rel.text._ZN4node10cares_wrapL17ares_sockstate_cbEPviii.text.unlikely._ZN4node10cares_wrapL18HostentToAddressesEP7hostent.isra.13.rel.text._ZN4node10cares_wrapL18HostentToAddressesEP7hostent.isra.13.text.unlikely._ZN4node10cares_wrap17GetHostByNameWrap5ParseEP7hostent.rel.text._ZN4node10cares_wrap17GetHostByNameWrap5ParseEP7hostent.text.unlikely._ZN4node10cares_wrapL14HostentToNamesEP7hostent.isra.14.rel.text._ZN4node10cares_wrapL14HostentToNamesEP7hostent.isra.14.text.unlikely._ZN4node10cares_wrap16AfterGetAddrInfoEP16uv_getaddrinfo_siP8addrinfo.rel.text._ZN4node10cares_wrap16AfterGetAddrInfoEP16uv_getaddrinfo_siP8addrinfo.text.unlikely._ZN4node10cares_wrapL4IsIPERKN2v89ArgumentsE.rel.text._ZN4node10cares_wrapL4IsIPERKN2v89ArgumentsE.rodata.str1.4.text.unlikely._ZN4node10cares_wrapL11GetAddrInfoERKN2v89ArgumentsE.rel.text._ZN4node10cares_wrapL11GetAddrInfoERKN2v89ArgumentsE.text.unlikely._ZN4node10cares_wrap17GetHostByNameWrapD2Ev.rel.text._ZN4node10cares_wrap17GetHostByNameWrapD2Ev.text.unlikely._ZN4node10cares_wrap13QueryAaaaWrapD2Ev.rel.text._ZN4node10cares_wrap13QueryAaaaWrapD2Ev.text.unlikely._ZN4node10cares_wrap14QueryCnameWrapD2Ev.rel.text._ZN4node10cares_wrap14QueryCnameWrapD2Ev.text.unlikely._ZN4node10cares_wrap12QueryTxtWrapD2Ev.rel.text._ZN4node10cares_wrap12QueryTxtWrapD2Ev.text.unlikely._ZN4node10cares_wrap11QueryNsWrapD2Ev.rel.text._ZN4node10cares_wrap11QueryNsWrapD2Ev.text.unlikely._ZN4node10cares_wrap17GetHostByAddrWrapD2Ev.rel.text._ZN4node10cares_wrap17GetHostByAddrWrapD2Ev.text.unlikely._ZN4node10cares_wrap14QueryNaptrWrapD2Ev.rel.text._ZN4node10cares_wrap14QueryNaptrWrapD2Ev.text.unlikely._ZN4node10cares_wrap12QuerySrvWrapD2Ev.rel.text._ZN4node10cares_wrap12QuerySrvWrapD2Ev.text.unlikely._ZN4node10cares_wrap11QueryMxWrapD2Ev.rel.text._ZN4node10cares_wrap11QueryMxWrapD2Ev.text.unlikely._ZN4node10cares_wrap10QueryAWrapD2Ev.rel.text._ZN4node10cares_wrap10QueryAWrapD2Ev.text.unlikely._ZN4node10cares_wrap9QueryWrapD0Ev.rel.text._ZN4node10cares_wrap9QueryWrapD0Ev.text.unlikely._ZN4node10cares_wrap12QueryTxtWrapD0Ev.rel.text._ZN4node10cares_wrap12QueryTxtWrapD0Ev.text.unlikely._ZN4node10cares_wrap17GetHostByAddrWrapD0Ev.rel.text._ZN4node10cares_wrap17GetHostByAddrWrapD0Ev.text.unlikely._ZN4node10cares_wrap17GetHostByNameWrapD0Ev.rel.text._ZN4node10cares_wrap17GetHostByNameWrapD0Ev.text.unlikely._ZN4node10cares_wrap13QueryAaaaWrapD0Ev.rel.text._ZN4node10cares_wrap13QueryAaaaWrapD0Ev.text.unlikely._ZN4node10cares_wrap14QueryNaptrWrapD0Ev.rel.text._ZN4node10cares_wrap14QueryNaptrWrapD0Ev.text.unlikely._ZN4node10cares_wrap11QueryNsWrapD0Ev.rel.text._ZN4node10cares_wrap11QueryNsWrapD0Ev.text.unlikely._ZN4node10cares_wrap10QueryAWrapD0Ev.rel.text._ZN4node10cares_wrap10QueryAWrapD0Ev.text.unlikely._ZN4node10cares_wrap12QuerySrvWrapD0Ev.rel.text._ZN4node10cares_wrap12QuerySrvWrapD0Ev.text.unlikely._ZN4node10cares_wrap14QueryCnameWrapD0Ev.rel.text._ZN4node10cares_wrap14QueryCnameWrapD0Ev.text.unlikely._ZN4node10cares_wrap11QueryMxWrapD0Ev.rel.text._ZN4node10cares_wrap11QueryMxWrapD0Ev.text.unlikely._ZN4node10cares_wrap17GetHostByAddrWrap5ParseEP7hostent.rel.text._ZN4node10cares_wrap17GetHostByAddrWrap5ParseEP7hostent.text.unlikely._ZN4node10cares_wrap9QueryWrap8CallbackEPviiPhi.rel.text._ZN4node10cares_wrap9QueryWrap8CallbackEPviiPhi.text.unlikely._ZN4node10cares_wrap9QueryWrap8CallbackEPviiP7hostent.rel.text._ZN4node10cares_wrap9QueryWrap8CallbackEPviiP7hostent.text.unlikely._ZN4node10cares_wrapL5QueryINS0_12QuerySrvWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_12QuerySrvWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_10QueryAWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_10QueryAWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_12QueryTxtWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_12QueryTxtWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_14QueryNaptrWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_14QueryNaptrWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_17GetHostByAddrWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_17GetHostByAddrWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_11QueryNsWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_11QueryNsWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_14QueryCnameWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_14QueryCnameWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_11QueryMxWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_11QueryMxWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL5QueryINS0_13QueryAaaaWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL5QueryINS0_13QueryAaaaWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrapL15QueryWithFamilyINS0_17GetHostByNameWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.rel.text._ZN4node10cares_wrapL15QueryWithFamilyINS0_17GetHostByNameWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE.text.unlikely._ZN4node10cares_wrap11QueryNsWrap5ParseEPhi.rel.text._ZN4node10cares_wrap11QueryNsWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap10QueryAWrap5ParseEPhi.rel.text._ZN4node10cares_wrap10QueryAWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap13QueryAaaaWrap5ParseEPhi.rel.text._ZN4node10cares_wrap13QueryAaaaWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap14QueryCnameWrap5ParseEPhi.rel.text._ZN4node10cares_wrap14QueryCnameWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap12QueryTxtWrap5ParseEPhi.rel.text._ZN4node10cares_wrap12QueryTxtWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap11QueryMxWrap5ParseEPhi.rel.text._ZN4node10cares_wrap11QueryMxWrap5ParseEPhi.text.unlikely._ZN4node10cares_wrap12QuerySrvWrap5ParseEPhi.rel.text._ZN4node10cares_wrap12QuerySrvWrap5ParseEPhi.text.unlikely._GLOBAL__sub_I_cares_wrap.cc.rel.text.startup._GLOBAL__sub_I_cares_wrap.cc.rel.init_array.rodata._ZZN4node7ReqWrapI16uv_getaddrinfo_sED4EvE19__PRETTY_FUNCTION__.rel.data.rel.ro._ZTVN4node10cares_wrap9QueryWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap10QueryAWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap13QueryAaaaWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap14QueryCnameWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap11QueryMxWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap11QueryNsWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap12QueryTxtWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap12QuerySrvWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap14QueryNaptrWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap17GetHostByAddrWrapE.rel.data.rel.ro._ZTVN4node10cares_wrap17GetHostByNameWrapE.rel.data.rel.local.node_cares_wrap_module.bss._ZN4node10cares_wrapL10ares_tasksE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group23456789:;<=>??ACD5Dr tXl$OqFGIJLMOPRSUVXY[\^_abdeghjk-kmnnpq=qstO"vwr{wyz|}$}9 &FC#    "#$&'R=W=\ =a=g=m=s=y=======}=t=g=^=S=J=@=7=/=%===c???`?X?H?8? (?????#?(?-?2?7?<?Ax?Fh?KX?PH?U8?Z(?_?d=j =p=v"=|*=2=;=D=O=]=k=w=|============4t=== =$=+Nz D m   %      !"#$%&'()*+,-./01 "6 "80 ":Y "< $     6 Z s     + 9     Q"G2 R "  "J !   'W"Jz"M,"P1ETY"S"#Y"VOY"Y{Y"\Y"_Y"bY"e,Y"hV[jzh"zO4/=GZr?Xv|""B"j"""" "2"X"~""""("O"v"""" "/"V"""""%"J"q""" !:n !  ! ! !  !0 !X !} ! !"!"L_""""@TG" cares_wrap.cc_ZN4node10cares_wrapL12SetAresErrnoEi_ZN4node10cares_wrapL10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10cares_wrapL17ares_sockstate_cbEPviii_ZN4node10cares_wrapL5QueryINS0_10QueryAWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_13QueryAaaaWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_14QueryCnameWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_11QueryMxWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_11QueryNsWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_12QueryTxtWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_12QuerySrvWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_14QueryNaptrWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL5QueryINS0_17GetHostByAddrWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL15QueryWithFamilyINS0_17GetHostByNameWrapEEEN2v86HandleINS3_5ValueEEERKNS3_9ArgumentsE_ZN4node10cares_wrapL11GetAddrInfoERKN2v89ArgumentsE_ZN4node10cares_wrapL4IsIPERKN2v89ArgumentsE_ZN4node10cares_wrapL18ares_poll_close_cbEP11uv_handle_s_ZN4node10cares_wrapL12ares_poll_cbEP9uv_poll_sii_ZN4node10cares_wrapL12ares_timeoutEP10uv_timer_si_ZN4node10cares_wrapL10ares_tasksE_ZN4node10cares_wrapL18HostentToAddressesEP7hostent.isra.13_ZN4node10cares_wrapL14HostentToNamesEP7hostent.isra.14_ZZN4node7ReqWrapI16uv_getaddrinfo_sED4EvE19__PRETTY_FUNCTION___GLOBAL__sub_I_cares_wrap.cc_ZStL8__ioinit.LC7.LC6.LC5.LC28.LC27.LC26.LC25.LC24.LC23.LC22.LC21.LC20.LC19.LC18.LC17.LC16.LC15.LC14.LC13.LC12.LC11.LC10.LC9.LC8.LC29.LC4.L32.L35.L36.L38.L8.L10.L11.L12.L13.L14.L15.L16.L17.L18.L19.L20.L21.L22.L23.L24.L25.L26.L27.L28.L29.LC31.LC32.LC33.LC34.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC43.LC44.LC45.LC50.LC51.LC52.LC53.LC54.LC55.LC72.LC73.LC76.LC77.LC103.LC113.LC120.LC121.LC123.LC124.LC125_ZN4node10cares_wrap9QueryWrapD5Ev_ZN4node10cares_wrap17GetHostByNameWrapD5Ev_ZN4node10cares_wrap13QueryAaaaWrapD5Ev_ZN4node10cares_wrap14QueryCnameWrapD5Ev_ZN4node10cares_wrap12QueryTxtWrapD5Ev_ZN4node10cares_wrap11QueryNsWrapD5Ev_ZN4node10cares_wrap17GetHostByAddrWrapD5Ev_ZN4node10cares_wrap14QueryNaptrWrapD5Ev_ZN4node10cares_wrap12QuerySrvWrapD5Ev_ZN4node10cares_wrap11QueryMxWrapD5Ev_ZN4node10cares_wrap10QueryAWrapD5Ev_ZN4node10cares_wrap9QueryWrap4SendEPKc_ZN4node10cares_wrap9QueryWrap4SendEPKci_ZN4node10cares_wrap9QueryWrap5ParseEPhi_ZN4node10cares_wrap9QueryWrap5ParseEP7hostent__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v87Isolate10GetCurrentEv_ZN2v86String3NewEPNS_7IsolateEPKci_ZNK2v85Value8ToStringEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v811HandleScopeD1Evares_library_initares_init_optionsuv_timer_init_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN2v87Integer3NewEiPNS_7IsolateE_ZN4node10cares_wrap17GetHostByNameWrap4SendEPKci_ZN4node7commons11getInstanceEv_ZN4node10cares_wrap9QueryWrap8CallbackEPviiP7hostentares_gethostbyname_ZN4node10cares_wrap9QueryWrapD2Ev_ZTVN4node10cares_wrap9QueryWrapE_ZNK2v85Value8ToObjectEv_ZN2v86Object6DeleteENS_6HandleINS_6StringEEE_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10cares_wrap9QueryWrapD1Ev_ZN4node10cares_wrap17GetHostByAddrWrap4SendEPKcuv_inet_ptonares_gethostbyaddr_ZN4node10cares_wrap14QueryNaptrWrap5ParseEPhiares_parse_naptr_reply_ZN2v85Array3NewEPNS_7IsolateEi_ZN2v86Object3NewEvares_free_data_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN4node10cares_wrap14QueryNaptrWrap4SendEPKc_ZN4node10cares_wrap9QueryWrap8CallbackEPviiPhiares_query_ZN4node10cares_wrap12QuerySrvWrap4SendEPKc_ZN4node10cares_wrap12QueryTxtWrap4SendEPKc_ZN4node10cares_wrap11QueryNsWrap4SendEPKc_ZN4node10cares_wrap11QueryMxWrap4SendEPKc_ZN4node10cares_wrap14QueryCnameWrap4SendEPKc_ZN4node10cares_wrap13QueryAaaaWrap4SendEPKc_ZN4node10cares_wrap10QueryAWrap4SendEPKcfreeuv_timer_againares_process_fduv_is_activemallocuv_poll_init_socketuv_poll_startuv_closeuv_timer_stopuv_timer_startuv_inet_ntop_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN4node10cares_wrap17GetHostByNameWrap5ParseEP7hostent_ZN4node10cares_wrap16AfterGetAddrInfoEP16uv_getaddrinfo_siP8addrinfouv_freeaddrinfo_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE_ZdlPvuv_last_error_ZN4node8SetErrnoE8uv_err_s_ZN2v84NullEv__assert2_ZN2v89UndefinedEv_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEv_ZN6jxcore8JXStringD1Ev_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZNK2v85Value8IsNumberEv_ZNK2v85Value12IntegerValueEv_Znwj_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v86Object3GetENS_6HandleINS_5ValueEEEuv_getaddrinfo_ZN4node10cares_wrap17GetHostByNameWrapD2Ev_ZN4node10cares_wrap17GetHostByNameWrapD1Ev_ZN4node10cares_wrap13QueryAaaaWrapD2Ev_ZN4node10cares_wrap13QueryAaaaWrapD1Ev_ZN4node10cares_wrap14QueryCnameWrapD2Ev_ZN4node10cares_wrap14QueryCnameWrapD1Ev_ZN4node10cares_wrap12QueryTxtWrapD2Ev_ZN4node10cares_wrap12QueryTxtWrapD1Ev_ZN4node10cares_wrap11QueryNsWrapD2Ev_ZN4node10cares_wrap11QueryNsWrapD1Ev_ZN4node10cares_wrap17GetHostByAddrWrapD2Ev_ZN4node10cares_wrap17GetHostByAddrWrapD1Ev_ZN4node10cares_wrap14QueryNaptrWrapD2Ev_ZN4node10cares_wrap14QueryNaptrWrapD1Ev_ZN4node10cares_wrap12QuerySrvWrapD2Ev_ZN4node10cares_wrap12QuerySrvWrapD1Ev_ZN4node10cares_wrap11QueryMxWrapD2Ev_ZN4node10cares_wrap11QueryMxWrapD1Ev_ZN4node10cares_wrap10QueryAWrapD2Ev_ZN4node10cares_wrap10QueryAWrapD1Ev_ZN4node10cares_wrap9QueryWrapD0Ev_ZN4node10cares_wrap12QueryTxtWrapD0Ev_ZN4node10cares_wrap17GetHostByAddrWrapD0Ev_ZN4node10cares_wrap17GetHostByNameWrapD0Ev_ZN4node10cares_wrap13QueryAaaaWrapD0Ev_ZN4node10cares_wrap14QueryNaptrWrapD0Ev_ZN4node10cares_wrap11QueryNsWrapD0Ev_ZN4node10cares_wrap10QueryAWrapD0Ev_ZN4node10cares_wrap12QuerySrvWrapD0Ev_ZN4node10cares_wrap14QueryCnameWrapD0Ev_ZN4node10cares_wrap11QueryMxWrapD0Ev_ZN4node10cares_wrap17GetHostByAddrWrap5ParseEP7hostent_ZNK2v85Value10IsFunctionEv_ZTVN4node10cares_wrap12QuerySrvWrapE_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZTVN4node10cares_wrap10QueryAWrapE_ZTVN4node10cares_wrap12QueryTxtWrapE_ZTVN4node10cares_wrap14QueryNaptrWrapE_ZTVN4node10cares_wrap17GetHostByAddrWrapE_ZTVN4node10cares_wrap11QueryNsWrapE_ZTVN4node10cares_wrap14QueryCnameWrapE_ZTVN4node10cares_wrap11QueryMxWrapE_ZTVN4node10cares_wrap13QueryAaaaWrapE_ZTVN4node10cares_wrap17GetHostByNameWrapE_ZN4node10cares_wrap11QueryNsWrap5ParseEPhiares_parse_ns_replyares_free_hostent_ZN4node10cares_wrap10QueryAWrap5ParseEPhiares_parse_a_reply_ZN4node10cares_wrap13QueryAaaaWrap5ParseEPhiares_parse_aaaa_reply_ZN4node10cares_wrap14QueryCnameWrap5ParseEPhi_ZN4node10cares_wrap12QueryTxtWrap5ParseEPhiares_parse_txt_reply_ZN4node10cares_wrap11QueryMxWrap5ParseEPhiares_parse_mx_reply_ZN4node10cares_wrap12QuerySrvWrap5ParseEPhiares_parse_srv_reply_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_cares_wrap_moduleS T#U+V3WO YXb YZ[\]   * : J Z j z           * : J Z h        $ ( , 0 4 8 < @ D H L P T X \ ` S T'U/V7W\^t D_` ab c7\@ Yakbt c\ ab c'\0 Ia[bd ~c\ ab c\  9aKbT nc\ ab c\ )a;bD ^c\ ab c\ a+b4 Nco\x Uab c\ R ab$ >c_\vd Y\d Y#\:dI dY\]XS Tf"gDhS Tj;kYZnl}mX S Tf<pdpgq S T$U,V4W^st Y Y Y Y7 CY^ jYuY\Y4\RYv\Y\d\ d.\Jdn\vUdkZ*w5]@]T\UdkZXXXS Tf2yLzS Tf2yLzS Tf2yLzS Tf2yLzS Tf2yLzS Tf2yLzS Tf2yLzS Tf2yLzS T"S Tf'cS Tf2S Tf" n6 >T8 ;Hfp AS T0U8V@WmtYd'\L\]oX S T$U,V4WXGtdUdkZ!w/]:]IXYX S T&U.V6WftYd\]X S T'U/V7Wt 8Y`d\ YHdr\kZ"m*8]\q[[Xt  ( 0 S TU'V/WG][iv]p d,B_zpd S T'U/V7Wh Y][AfU2uFl[~[ Y Y-[K\]['?dymQ [ e mS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mXS Tj;kYZnl}mX S T"U/LCUkdkZw]]XS T$2U]dukZw]XS T$2U]dukZw] X S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S TU$V,WcwjUVWu]7kXZ|\k[-G[R pY][ /GqXX S T$U,V4WS qY]jU"V*WEuYg]mkZ\k[2@eu[[/G_XX S T*ELV^UdkZw]$URdmkZXX S TUHiGzUdkZw)]4]DLUzdkZXX S TUHiGzUdkZw)]4]DLUzdkZXX S T!U)V1WhtYd\U/dPkqZw]]Udk;ZYXiXyX S T!U)V1WXztYd\vUJdnkZw]]Ud5kSZXXX S T!U)V1W[}t Y Yu.YR\id\d\vUd<kZZw]]Udk#ZYXfX}X S T$U,V4W^t Y Y Y YGunY\d\d\dC\_d\vUdkZ?wJ]U]ltUdkZX!X8XS T ( 2:n OPQR PR PR PR ~PR }PR |PR {PR xPrR oPQ OeQ  4H \ p#%,'l)+-/ 103T5x79;>A@DGJLOLR|UWY [<]l_ace,g\ikmoqLs|uwy {<}l L     P     P     H |   '4 *O'@ *P'L *Q'X *R'd *e'p*' *o' *r' *x' *{' *|' *}' *~' *' *' *' *'*'*'0*'D*'X*'l*'*'*'*'*' *' *y' *g' *' *'  *' *'$ *'0 *'< *'H*j'P*'X*'`*'h*'p*'x*'*'*'*'*'*S!',c0_2G(0 @0*?JdF @*Ax   @*D PQL @x(*G2@ @@*J+' @8*Mb,  @*PY @(*SNJPY @(*VY @(*Y0 nYj @ (*\jpY @H(*_OYK @p(*b*0Y @(*e3Y/ @(*hc- @*k3  / @0*nk  = @0 *q ,  ( @Px*ta $ ${ @h*w &=  &h9 @0*z{ ' '$ @`*} (] (4 Y @* -  - @* 2.+ /s /qo @* "5 05 @H@*5Z5V @@*n6p6 @@*7-7) @@*Z77 @H@*N8P8 @@*08l8h @@*99 @@*.:;0:7 @H@*g:: @@*n;p; @H*)<c <_ @H*<< @XH*v=@=< @H*r&>0> @H*>> @0H*F??{ @xH*6@@@ @H*@H@D @H*uAA @PH*FBPB @H*EBC @`*DD  @@P*G-E0E @P*EF;PF7 @H*I I @(H*jpMpM @pH*;QQ @H*TT @ H* XY XU @H H*[+[' @ H*@_@_ @ H*^bb @ H*1`f`f @hP*" ja j] @* k k @H*!mC!m?! @*w!o!o! @*!Hr."`r *" @X*a"u" u " @(*"x#xG # @8P*E#}u#}Fq# @8*#X}# @*#`}9 #} # @0* /$} +$ @0* d$} `$ @(0*$~ $ @X0*$ ~ $ @0* %@~ % @0*A%`~ =% @0*x%~ t% @0*%~ % @H0*%~ % @x0*$&~ & @0*`&\& @* &@@&@&@&0D(&l&l & @8*'P '`0+O fs_event_wrap.o/1560953071 501 20 100644 12048 ` ELF'4(30&+USd$싓D$ R$d$[]UVSd$t$ 4$4$d$[^]renamechangeFSEventstartclosenode_fs_event_wrapUWVSd$E@xEE؉$EEUEE{EuD$ D$E4$D$EEE E D$ 4$D$ED$EEE4$D$ED$EUEЋEỦEԋE@4$D$E4$T$EŰET$U|$4$D$D$T$ E$e[^_]ËE8P(t4$U1@$1E$uT$EUĉ$T$D$ uD$ fEKUWEVǍuSd$$E<$$D$ D$4$T$E}ԃ4$|$UԃD$$D$4$D$EUԃ<$T$EȅiE$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$|$4$Ẽ4$D$D$}Eԃ|$D$ D$E$EЉ$e[^_]Ðt&../src/wrappers/fs_event_wrap.ccFSEventWrap: Aborting due to unwrap failure at %s:%d FSEventWrap - Start : Bad argumentsUWVuSd$4$E PMM yJyXD$ $EE@T} W} W}ċу0RR EẺ$EE @E @D$ED$$E$MD$ED$T$ L$$M0E x{E @$UU|E@TET$<$D$Eă4$D$}E$vB Pz8@Et&}ĉ<$D$ED$ D$Eă<$D$Eă<$D$Eă4$D$}4$Ee[^_]t&E}ĉ<$UăE/t&UEE$T$UET$$U<$Eă+t&E<$UEăUu&E$Uqt&D$ D$D$$UWVuSd$ĉ4$}E PJytdD$ $xTu[Eԉ$Uԃ1t $4$D$4$e[^_]B tPzu(@뚍vM @TEԉ$L$EԃfD$ hD$D$$UVSd$t$ 4$FD$D$$D$v$FT@d$[^]UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE Uԋ@$D$}ԃ$X$|$|$4$MUVSd$4$t$D$$d$[^] #$GCC: (GNU) 4.9.x 20150123 (prerelease)zR|  1AB AkA $@0AB BhAA ,hAB CN AAA A 02AB EF AAA F 0AB BD% AAA G ,AB BD AAA C $0IAB BAAA ,XAB BDn AAA F $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node11FSEventWrapD2Ev.rel.text._ZN4node11FSEventWrapD2Ev.text.unlikely._ZN4node11FSEventWrapD0Ev.rel.text._ZN4node11FSEventWrapD0Ev.rodata.str1.1.text.unlikely._ZN4node11FSEventWrap7OnEventEP13uv_fs_event_sPKcii.rel.text._ZN4node11FSEventWrap7OnEventEP13uv_fs_event_sPKcii.text.unlikely._ZN4node11FSEventWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node11FSEventWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rodata.str1.4.text.unlikely._ZN4node11FSEventWrap5StartERKN2v89ArgumentsE.rel.text._ZN4node11FSEventWrap5StartERKN2v89ArgumentsE.text.unlikely._ZN4node11FSEventWrap5CloseERKN2v89ArgumentsE.rel.text._ZN4node11FSEventWrap5CloseERKN2v89ArgumentsE.text.unlikely._ZN4node11FSEventWrapC2EN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node11FSEventWrapC2EN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node11FSEventWrap3NewERKN2v89ArgumentsE.rel.text._ZN4node11FSEventWrap3NewERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_fs_event_wrap.cc.rel.text.startup._GLOBAL__sub_I_fs_event_wrap.cc.rel.init_array.rel.data.rel.ro._ZTVN4node11FSEventWrapE.rel.data.rel.node_fs_event_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group   !"F"2*$&(*+-.A F K P U Z _\ek$,q1+!&10 $XpNft2"6Y<l3a OQi ISI  D (fs_event_wrap.cc_GLOBAL__sub_I_fs_event_wrap.cc_ZStL8__ioinit.LC4.LC2.LC3.LC6.LC7.LC8.LC12.LC10.LC11_ZN4node11FSEventWrapD2Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZTVN4node11FSEventWrapE_ZN4node10HandleWrapD2Ev_ZN4node11FSEventWrapD1Ev_ZN4node11FSEventWrapD0Ev_ZdlPv_ZN4node11FSEventWrap7OnEventEP13uv_fs_event_sPKcii_ZN2v811HandleScopeC1Ev_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v87Integer3NewEiPNS_7IsolateE_ZNK2v85Value8ToObjectEv_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN2v811HandleScopeD1Ev_ZN2v84NullEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectEuv_last_error_ZN4node8SetErrnoE8uv_err_s_ZN2v87Isolate10GetCurrentEvabort_ZN4node11FSEventWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node11FSEventWrap3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node11FSEventWrap5StartERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node11FSEventWrap5CloseERKN2v89ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEvuv_fs_event_init_ZNK2v85Value12BooleanValueEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN6jxcore8JXStringD1Ev_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v89UndefinedEvuv_unrefstderrfprintf_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN4node11FSEventWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_s_ZN4node11FSEventWrapC1EN2v86HandleINS1_6ObjectEEE_Znwj_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10HandleWrap9SetHandleEP11uv_handle_snode_fs_event_wrap_module0 12&30 14$60 1+8d "99:;<>=L>g?@AB # $CD0 1$8,F4G:HYIkJK %LMNOI & L PDQJRfIu 'LPQSL T>)C 0 18OUVWX7YEZj:|[\ (9]^[#>B_iA~B__` ) *abD 0 18CU\_r@~[>c ) *abD0 1+e12 0 18$F,G=_S@_[l>;gf[0 1 h( i2j:k4 5l E Dl  4\4 1E@12H10P!P'P,PYP1U @" 1y0 @" 1 26 @"1V2 @#12495 @p$1m @`%p1 ( I$ @% 1a: @  @%h1  F @X&81"7X 3 @&1$G` C @&1&qt m @&1(  0 (   @&P1.t h2/ H^ node_buffer.o/ 1560953076 501 20 100644 81096 ` ELF@4(#$+,%&()./;<5689Ud$D$ $R d$]Ud$D$ @$R d$]UVSd$t$$4$P 1;td$[^]Ít&D$ N9Hd$[^]D$@UWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]USd$D$ $d$[]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]UVuSd$E@@4$D$E4$D$E$e[^]SlowBufferbinarySliceasciiSlicebase64Sliceucs2SlicehexSliceutf8Sliceutf8WriteasciiWritebinaryWritebase64Writeucs2WritehexWritereadFloatLEreadFloatBEreadDoubleLEreadDoubleBEwriteFloatLEwriteFloatBEwriteDoubleLEwriteDoubleBEfillcopycompareindexOfStringindexOfNumberindexOfBufferbyteLengthUtf8LengthmakeFastBuffersetFastBufferConstructoroffset is not uintvalue not a numberMust have start <= endArgument must be a stringOffset is out of boundsInvalid hex stringoffset out of rangelength out of rangeoffset or length out of rangesourceEnd < sourceStarttargetStart out of boundssourceStart out of boundssourceEnd out of boundsnode_bufferUWEVǍuSd$$E<$$EȋD$ D$4$D$}ԃ4$|$EԃD$$D$4$D$EEԃ<$D$Uȅ9E1t<$UUȉ4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EEȃ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$EȋE4$D$ D$EȃD$ D$EԉD$E$$D$|$4$EЃ4$D$D$}Eԃ|$D$ D$E$Ẻ$e[^_]Ðt&UUȉEUVSd$t$ nu(l$t$D$F$F$d$[^]UVSd$t$ @Ft2$D$D$F$Ft$4$d$[^]UWVuSd$ĉ4$4$$ǍEԀu9E @~sE MԉMЋ@t{$tm$EЉ$Uԃ1t $4$D$M4$Ee[^_]Eԉ$EEԃu1Trying to read beyond buffer lengthTrying to write beyond buffer lengthBad argument. expects parameters bigger than 0end cannot be longer than parent.lengthBad argument. expects(integer, integer)Buffer.fill(value, start,end) -> start or end can not be smaller than 0Buffer.fill(value, start,end) -> start must be <= endBuffer.fill(value, start,end) -> end can not be bigger than parent's lengthBuffer.fill(value, start,end) requires (int, int, int)Buffer::New Bad argument (length > kMaxLength)First argument must be a Buffer.First argument should be a BufferBuffer::Compare expects 2 argumentsBuffer::Compare expects 2 arguments (buffer, buffer)Buffer::IndexOfNumber expects following arguments (buffer, number, number [optional])Buffer::IndexOfNumber expects following arguments (buffer, number, number [optional]).Buffer::IndexOfString expects following arguments (buffer, string, number [optional]).Buffer::IndexOfString expects 3 arguments (buffer, string, number [optional])Buffer::IndexOfBuffer expects following arguments (buffer, buffer, number [optional]).Buffer::IndexOfBuffer expects following arguments (buffer, buffer, number [optional])../src/wrappers/node_buffer.ccUWVuSd$4$} 4$$x MtHEĉ$Uă1t $D$4$M4$Ee[^_]GGMĉM$MG$]ukmM]Ef.E„1E%GD$E$Eă$UMG}<$D$Eă$M<$E]Z\$Eă&Eĉ$EEă&E]$EEt&9a}D$ED$ <$D$Eă<$D$Eă<$D$W}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$UUWVuSd$4$} 4$$x MtHEĉ$Uă1t $D$4$M4$Ee[^_]GGMĉM$MG$]ukmM]Ef.E„1E%GD$E$Eă$UMG}<$D$Eă$MT<$UԉEED$Eăt&Eĉ$EEă&E]$EEt&9a}D$ED$ <$D$Eă<$D$Eă<$D$Z}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$UUWVuSd$4$} 4$$x MtHEĉ$Uă1t $4$D$M4$Ee[^_]G GMĉM$M G$]ukmM]Ef.E„9E-GD$E$Eă$UMG}<$D$Eă$M<$EEU׈E׈UEUֈEֈU]Z\$EăvEĉ$EEă&E]$EEt&9I}D$ED$ <$D$Eă<$D$<}D$ED$ <$D$Eă<$D$Eă<$D$UWVuSd$4$} 4$$x MtHEĉ$Uă1t $4$D$M4$Ee[^_]G-GMĉM$M-G$]ukmM]Ef.E„YEMGD$E$Eă$UMG}<$D$Eă$MT<$UԉEUEЈUЈEUEшUшEUE҈U҈EUEӈUӈEED$Eăt&Eĉ$EEă&E]$EEt&9)}D$ED$ <$D$Eă<$D$<}D$ED$ <$D$Eă<$D$Eă<$D$UW}VSd$<$u <$$x VMtMEԉ$Uԃ1t $<$D$M<$Ee[^_]FMԉMЃ$U4EUuvD$ uЉD$Ẻ4$D$Eԃ4$D$Eԃ4$D$EԃOvUȍEԉ$EEԃUnNF$UiUC~QF$#F~tF$]~MZE~jF$VEBUЉD$$Eԃ$M}uBfnUEf~GEЉ$EԃyfEЉ$Eԃ뉐t&FUȃD$EЉ$Eԃ$u9rU9suЍD$ED$ 4$D$Eԃ4$D$Tt&D$ t&EЉ$EԃfEЉU$EԃURUW}VSd$<$u <$$x VMtMEԉ$Uԃ1t $<$D$M<$Ee[^_]FMԉMЃ$U4EUąuvD$ uЉD$Ẻ4$D$Eԃ4$D$Eԃ4$D$EԃOvUȍEԉ$EEԃUnNF$UiUă;~IF$F~lF$~]~pF$VEčBUЉD$$Eԃ$MĀ}uH~EEfU&EЉ$Eԃ널t&EЉ$Eԃ냐t&FUȃD$EЉ$Eԃ$uĉ9r U9{uЍD$ED$ 4$D$Eԃ4$D$XD$ t&EЉ$EԃfEЉUĉ$EԃUZUW}VSd$<$u <$$x VMtMEԉ$Uԃ1t $<$D$M<$Ee[^_]FMԉMЃ$U4EUuvD$ uЉD$Ẻ4$D$Eԃ4$D$Eԃ4$D$EԃOvUȍEԉ$EEԃUnNF$UiUk~yF$KFF$]~MZEF$VEBUЉD$$Eԃ$M}ubfnUf~JB BJBJE%&EЉ$EԃUfEЉ$EԃffFUȃD$EЉ$Eԃ$u9r U9auЍD$ED$ 4$D$Eԃ4$D$(D$ t&EЉ$EԃwfEЉU$EԃU*UW}VSd$<$u <$$x VMtMEԉ$Uԃ1t $D$<$M<$Ee[^_]FMԉMЃ$U4EUąuЍD$ED$ 4$D$Eԃ4$D$Eԃ4$D$Eԃ<$D$uKUȍEԉ$EEԃUVNF$UUUă~F$kFF$~]F$VEčBUЉD$$Eԃ$MĀ}ux~EfJB BJBJBJBJBJBJEEЉ$EԃMfEЉ$EԃPfFUȃD$EЉ$Eԃ$uĉ9r U9KuЍD$ED$ 4$D$Eԃ4$D$Eԃ4$D$Eԃ\uЍD$ED$ 4$D$Eԃ4$D$뫋EЉ$Eԃ7fEЉUĉ$EԃUUWEVSd$u $ENE̋FPzD$$MMĉEȅɍ}D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$MEЉ$Ee[^_]&B EȨiPEzU@ɍ}ԉEOVF$M.Mă"~F$FF$~F$U"Uĉ9tM;AD$ )ЉD$EP<$T$EԃD$EЉ$u<$MEԃM&<$EEԃUO&<$Eԃt&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$}t&<$D$ED$ D$Eԃ<$D$Eԃ<$D$<$Eԃ-t&D$ +UWEVSd$u $ENE̋FPzD$$MMĉEȅɍ}D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$MEЉ$Ee[^_]&B EȨiPEzU@ɍ}ԉEOVF$M.Mă"~F$FF$~F$U"Uĉ9tM;AD$ )ЉD$EP<$T$EԃD$EЉ$u<$MEԃM&<$EEԃUO&<$Eԃt&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$}t&<$D$ED$ D$Eԃ<$D$Eԃ<$D$<$Eԃ-t&D$ +UWEVSd$u $ENE̋FPzD$$MMĉEȅɍ}D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$MEЉ$Ee[^_]&B EȨiPEzU@ɍ}ԉEOVF$M.Mă"~F$FF$~F$U"Uĉ9tM;AD$ )ЉD$EP<$T$EԃD$EЉ$u<$MEԃM&<$EEԃUO&<$Eԃt&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$}t&<$D$ED$ D$Eԃ<$D$Eԃ<$D$<$Eԃ-t&D$ +UWEVSd$u $ENE̋FPzD$$MMĉEȅɍ}D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$MEЉ$Ee[^_]&B EȨiPEzU@ɍ}ԉEOVF$M.Mă"~F$FF$~F$U"Uĉ9tM;AD$ )ЉD$EP<$T$EԃD$EЉ$u<$MEԃM&<$EEԃUO&<$Eԃt&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$}t&<$D$ED$ D$Eԃ<$D$Eԃ<$D$<$Eԃ-t&D$ +UWEVSd$u $ENE̋FPzD$$MMĉEȅɍ}D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$MEЉ$Ee[^_]&B EȨiPEzU@ɍ}ԉEOVF$M.Mă"~F$FF$~F$U"Uĉ9tM;AD$ )ЉD$EP<$T$EԃD$EЉ$u<$MEԃM&<$EEԃUO&<$Eԃt&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$}t&<$D$ED$ D$Eԃ<$D$Eԃ<$D$<$Eԃ-t&D$ +UWEVSd$u $ENE̋FPzD$$MMĉEȅɍ}D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$MEЉ$Ee[^_]&B EȨiPEzU@ɍ}ԉEOVF$M.Mă"~F$FF$~F$U"Uĉ9tM;AD$ )ЉD$EP<$T$EԃD$EЉ$u<$MEԃM&<$EEԃUO&<$Eԃt&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$}t&<$D$ED$ D$Eԃ<$D$Eԃ<$D$<$Eԃ-t&D$ +UWE؍}VSd$u $EVEuxD$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$EЉ$MEЉ$Ee[^_]rF$UlUȃ`~fF$U=Uȃ1~OF$FF$EFPJy%B EȨtPEzu@Eȃ~F$~#F$MMĉ9u9F)ȉD$ED$EH $<$Uԃ1t $D$EЉ$}o<$UEԃUx&<$EԃUf<$Eԃt&D$$Eȃ~<$Eԃ$~<$EEԃMt&<$EԃJt&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$EԃD$ D$ UWVuSd$ċU 4$U4$$UЀx z Mu}D$ D$EЉ<$D$Eԃ<$D$Eԃ<$D$EԃD$4$M4$Ee[^_]fEԉ$Uԃ1t$뵐t&~~B}ԋM@@=B~qBD$<$Eԃ$UЉD$<$T$Eԃ4$D$}Ft&U̍}ԉ<$EԃUlt&<$EԃUWVuSd$4$} 4$$x WMEĉE}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$M4$Ee[^_]Eĉ$Uă1t $D$4$U뱍t&GMĉM/@@GGD$EU$UMăt Gƒ|$ $MD$EL$$&UEĉ$EEăU@EU$EăUQt&EM$EăMat&@@]MẺ$EM~^GD$ED$M$E}Љ$$|$D$NjE$M&E$EăMUWVuSd$4$} 4$$EyEGEtMEĉ$Uă1t $D$4$M4$Ee[^_]GPJyD$$EMEĉE}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$UGfB E{PEzgM@ɉEaWGMĉMƒC@@3GGEE$E‹EtU$UEED$D$E$U}ċ8D$E$EăUEET$$ED$ |$D$Eĉ$|$4$MfEĉ$EEă&G$E}{EH+E9F…9M}D$ED$ <$D$Eă<$D$Eă<$D$Eă9t&E$EăE_&E$Eă:fUMJUԉT$U $D$ D$T$NjED$EԉD$E$EăUE8ET$$UăEUU$T$EUD$ D$EĉT$$ME|$L$$&GHʃ$MI+UY&ED$D$E$M}ċ8D$E$EăMEEL$$ED$ |$D$Eĉ$|$4$U{E$Eăȃt+~ G#t&E$Eă fAxűA uUUWVuSd$4$} 4$$EyEGEtMEĉ$Uă1t $D$4$M4$Ee[^_]GPJyD$$EMEĉED$ }D$E<$D$Eă<$D$Eă<$D$Eă4$D$UGfB E{PEzgM@ɉEaWGUĉUƒC@@3G~zGEE$E‹EtU$UEtSD$ Eĉ$EEăf&E$EăEs&&G$E}EH+E9F…9M}D$ED$ <$D$Eă<$D$Eă<$D$Eăt&ED$D$E$M}ċ8D$E$EăMEEL$$ED$ |$D$Eĉ$|$4$UE$EăfUMJUԉT$U $D$ D$T$NjED$EԉD$E$EăUE8ET$$UăEUU$T$EUD$ D$EĉT$$ME|$L$$&GHʃ$MI+U&ED$D$E$M}ċ8D$E$EăMEEL$$ED$ |$D$Eĉ$|$4$McE$Eăȃt)~G)E$Eăt&Axu΋A uUWVuSd$4$} 4$$EyEGEtMEĉ$Uă1t $D$4$M4$Ee[^_]GPJyD$$EMEĉE}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$UGfB E{PEzgM@ɉEaWGMĉMƒC@@3GGEE$E‹EtU$UEED$D$E$U}ċ8D$E$EăUEET$$ED$ |$D$Eĉ$|$4$MfEĉ$EEă&G$E}{EH+E9F…9M}D$ED$ <$D$Eă<$D$Eă<$D$Eă9t&E$EăE_&E$Eă:fUMJUԉT$U $D$ D$T$NjED$EԉD$E$EăUE8ET$$UăEUU$T$EUD$ D$EĉT$$ME|$L$$&GHʃ$MI+UY&ED$D$E$M}ċ8D$E$EăMEEL$$ED$ |$D$Eĉ$|$4$U{E$Eăȃt+~ G#t&E$Eă fAxűA uUUWVuSd$4$} 4$$EyEGEtMEĉ$Uă1t $D$4$M4$Ee[^_]GPJyD$$EMEĉE}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$UGfB E{PEzgM@ɉEaWGMĉMƒC@@3GGEE$E‹EtU$UEED$D$E$U}ċ8D$E$EăUEET$$ED$ |$D$Eĉ$|$4$MfEĉ$EEă&G$E}{EH+E9F…9M}D$ED$ <$D$Eă<$D$Eă<$D$Eă9t&E$EăE_&E$Eă:fUMJUԉT$U $D$ D$T$NjED$EԉD$E$EăUE8ET$$UăEUU$T$EUD$ D$EĉT$$ME|$L$$t&GHʃ$MI+UY&ED$D$E$M}ċ8D$E$EăMEEL$$ED$ |$D$Eĉ$|$4$U{E$Eăȃt+~ G#t&E$Eă fAxűA uUUWVuSd$4$} 4$$EyEGEtMEĉ$Uă1t $D$4$M4$Ee[^_]GPJyD$$EMEĉE}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$UGfB E{PEzgM@ɉEaWGMĉMƒC@@3GGEE$E‹EtU$UEED$D$E$U}ċ8D$E$EăUEET$$ED$ |$D$Eĉ$|$4$MfEĉ$EEă&G$E}{EH+E9F…9M}D$ED$ <$D$Eă<$D$Eă<$D$Eă9t&E$EăE_&E$Eă:fUMJUԉT$U $D$ D$T$NjED$EԉD$E$EăUE8ET$$UăEUU$T$EUD$ D$EĉT$$ME|$L$$&GHʃ$MI+UY&ED$D$E$M}ċ8D$E$EăMEEL$$ED$ |$D$Eĉ$|$4$U{E$Eăȃt+~ G#t&E$Eă fAxűA uUUWVuSd$4$} 4$$EyEGEtMEĉ$Uă1t $D$4$M4$Ee[^_]GPJyD$$EMEĉE}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$UGfB E{PEzgM@ɉEaWGMĉMƒC@@3GGEE$E‹EtU$UEED$D$E$U}ċ8D$E$EăUEET$$ED$ |$D$Eĉ$|$4$MfEĉ$EEă&G$E}{EH+E9F…9M}D$ED$ <$D$Eă<$D$Eă<$D$Eă9t&E$EăE_&E$Eă:fUMJUԉT$U $D$ D$T$NjED$EԉD$E$EăUE8ET$$UăEUU$T$EUD$ D$EĉT$$ME|$L$$&GHʃ$MI+UY&ED$D$E$M}ċ8D$E$EăMEEL$$ED$ |$D$Eĉ$|$4$U{E$Eăȃt+~ G#t&E$Eă fAxűA uUUW}VSd$<$<$$Uuĉ4$Eă4$D$UEċ4$ET$UăE4$T$D$E UątbE U$UEԉT$Eԉ4$D$D$ Eă<$D$M<$Ee[^_]t&E뫍&EUUWVSd$u E؉$E}ĉ<$D$ED$EăE1t $D$<$EԉD$ ED$<$D$EăJyt)D$$ƋE$e[^_]fB tP1zuՋpЍ&ƍE؉$ED$UċE$D$EăEԡ 1zUWEVSd$U$}EЋuUŰB EȅpEċBJ ỦL$J $ЋŰEzrB #E BztEЉ$e[^_]Ít&EčuԉỦD$B4$D$ŨEԋJ4$EĉL$Ũ}ԋJD$L$ R<$T$EȋH4$T$Eă<$D$ D$EԉD$EЉ$e[^_]ÐBJt $UŰBŨ$؉$U̅EzrB &'u$BUỦEt&<$UỦBB$$E U̅Bzu s%1ɨt fg[uuvOvfOUVSd$t$0T$8@1FFt$Ft$$D$t$D$F$F$D$4FFFF D$F$D$<4$D$D$ D$D$d$ [^]UWVuSd$4$} 4$$‹zG}ЉEu` ~t $UčMЉD$L$$EăD$4$M4$Ee[^_]Eĉ$Uă1tË$뷐t&~tG}ĉ$UME1҃UM~rL$<$D$ D$Eă<$D$Eă<$D$7vM}ĉ<$UEăUMp}?wEЉU@<$D$}ă$$MU$|$L$ T$|$4$MUVSd$t$0@FD$D$ D$D$4$@Ft2$D$D$F$Ft$d$ [^]UVSd$t$ 4$4$d$[^]UWVSd$uE؉$E}D$<$D$EăE1t $D$<$EԉD$ ED$<$D$EăJytPD$$ƋE 4$D$D$ED$ D$E$e[^_]ÍvB tP1zup멍&ƍE؉$ED$UD$$EăEԡ UWVSd$uE؉$E}D$<$D$EăE1t $D$<$EԉD$ ED$<$D$EăJytPD$$ƋE4$D$ED$ E D$ED$E$e[^_]Ðt&B tP1zup멍&ƍE؉$ED$UD$$EăEԡ UWVSd$ԋu4$t-E t$}<$u4$t1e[^_]Ðt&E 1t $t$$uʋE t$<$EED$E$vjUWVuSd$4$} 4$$x MtHEԉ$Uԃ1t $4$D$M4$Ee[^_]WmWMԉMЉEȋEЉT$$UԃEȉ$D$UUȄuS}ЍD$ED$ <$D$Eԃ<$D$Eԃ<$D$EԃAHyD$$Eă4GD$EЉ$EԃEG$EȃG $MċQ;UM9';MD$ }ЉD$Ẻ<$D$Eԃ<$D$vEȍEԉ$EUԃE}@ EĨPEz@EvEЉ$Eԃ/fEЉ$EԃfEЉ$EԃfD$ %t&D$ MċED$AD$E$Egt&D$ UW}VSd$<$u <$$yEȋFEtHEԉ$Uԃ1t $D$<$M<$Ee[^_]FPEЋBxED$M$MEċFFUԉL$UЉ$FVEЉT$U$Eԃ$UEEЉT$$Eԃ$E}~FPу$E}E}Eċ@9Eu9uUċJ9Mv9Uu+U)9F)9F‹UĉD$ƋBȉD$EE$Eȉt$D$EЉ$EԃEt&R BxBEċE̅~MEԉ$EEԃM$L$muЍD$ED$ 4$D$Eԃ4$D$Eԃ4$D$LvEЉ$UԃfẺUt&EЉ$EԃЃt~FBBxuB uڐt&E+t&~~bFPуu|BxufB u\f~~rFPуBxurB uhEЉ$EԃЃt~F $EЉ$EԃЃt~F$ESvD$ uЉD$Eȉ4$D$Eԃ4$D$Eԃ4$D$Eԃ<$D$Ut&D$ D$ uЉD$Eȉ4$D$Eԃ4$D$t&EЉ$EԃfEЉ$EԃfEЉ$Eԃ6fD$ st&EEiED$D$EЉ$UWVuSd$4$} 4$$yEЋGL$M̉<$GEM̄}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$EԃD$4$U4$Ee[^_]&Eԉ$Uԃ1t$밐t&EȉL$$F|$Eԉ$EEԃ$ŰMȉEĉ$L$Eԃ$|$}̉E<$Eԃ$Mȉ<$EL$Eԃ$UċM9FхD$ET$Mȉ$MȃDMЉD$ẺL$$t&}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ4$D$M`t&U99ʺGcUW}VSd$<$u <$$‹zEЋFŨ~F$ŪuzuԉD$ED$ 4$D$Eԃ4$D$Eԃ4$D$Eԃ<$D$M<$Ee[^_]FFEȍEԉE̋EȉT$$*M̋Eȉ $D$Eԃ$M̉EċEȉ $D$Eԃ$Eȃ~F$E~OF$QMąP9uȋUċM)L$T$$MЉ)L$E‰D$Ẻ$t&Eԉ$Uԃ1$Ẻ$Eԃ.fu̍D$ED$ 4$D$Eԃ4$D$Eԃ4$D$)UčEԉ$EEԃUĉEUED$D$Ẻ$Ẻ$EԃfEĺHUSd$D$D$ $d$[]D$RT$PUWVSd$D$4JytAB BD AAA C $ FAB B~AA   .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN2v818RetainedObjectInfo13GetGroupLabelEv.text._ZN2v818RetainedObjectInfo13GetGroupLabelEv.text.unlikely._ZN2v818RetainedObjectInfo15GetElementCountEv.text._ZN2v818RetainedObjectInfo15GetElementCountEv.text.unlikely._ZN2v818RetainedObjectInfo14GetSizeInBytesEv.text._ZN2v818RetainedObjectInfo14GetSizeInBytesEv.text.unlikely._ZN4node18RetainedBufferInfo7DisposeEv.text._ZN4node18RetainedBufferInfo7DisposeEv.text.unlikely._ZN4node18RetainedBufferInfo12IsEquivalentEPN2v818RetainedObjectInfoE.rel.text._ZN4node18RetainedBufferInfo12IsEquivalentEPN2v818RetainedObjectInfoE.text.unlikely._ZN4node18RetainedBufferInfo7GetHashEv.text._ZN4node18RetainedBufferInfo7GetHashEv.text.unlikely._ZN4node18RetainedBufferInfo8GetLabelEv.rel.text._ZN4node18RetainedBufferInfo8GetLabelEv.text.unlikely._ZN4node18RetainedBufferInfoD2Ev.text._ZN4node18RetainedBufferInfoD2Ev.text.unlikely._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.rel.text._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely._ZN4node10ObjectWrap3RefEv.rel.text._ZN4node10ObjectWrap3RefEv.text.unlikely._ZN4node18RetainedBufferInfoD0Ev.rel.text._ZN4node18RetainedBufferInfoD0Ev.text.unlikely._ZN4node10ObjectWrapD2Ev.rel.text._ZN4node10ObjectWrapD2Ev.text.unlikely._ZN4node18RetainedBufferInfo14GetSizeInBytesEv.rel.text._ZN4node18RetainedBufferInfo14GetSizeInBytesEv.rodata.str1.1.text.unlikely._ZN4node6Buffer10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node6Buffer10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node10ObjectWrap5UnrefEv.rel.text._ZN4node10ObjectWrap5UnrefEv.text.unlikely._ZN4node10ObjectWrapD0Ev.rel.text._ZN4node10ObjectWrapD0Ev.text.unlikely._ZN4node6Buffer24SetFastBufferConstructorERKN2v89ArgumentsE.rel.text._ZN4node6Buffer24SetFastBufferConstructorERKN2v89ArgumentsE.rodata.str1.4.text.unlikely._ZN4node6Buffer11ReadFloatLEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer11ReadFloatLEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer12ReadDoubleLEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer12ReadDoubleLEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer11ReadFloatBEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer11ReadFloatBEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer12ReadDoubleBEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer12ReadDoubleBEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer12WriteFloatLEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer12WriteFloatLEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer13WriteDoubleLEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer13WriteDoubleLEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer12WriteFloatBEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer12WriteFloatBEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer13WriteDoubleBEERKN2v89ArgumentsE.rel.text._ZN4node6Buffer13WriteDoubleBEERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer8HexSliceERKN2v89ArgumentsE.rel.text._ZN4node6Buffer8HexSliceERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer11BinarySliceERKN2v89ArgumentsE.rel.text._ZN4node6Buffer11BinarySliceERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer9Utf8SliceERKN2v89ArgumentsE.rel.text._ZN4node6Buffer9Utf8SliceERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer10AsciiSliceERKN2v89ArgumentsE.rel.text._ZN4node6Buffer10AsciiSliceERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer11Base64SliceERKN2v89ArgumentsE.rel.text._ZN4node6Buffer11Base64SliceERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer9Ucs2SliceERKN2v89ArgumentsE.rel.text._ZN4node6Buffer9Ucs2SliceERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer4FillERKN2v89ArgumentsE.rel.text._ZN4node6Buffer4FillERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer10Utf8LengthERKN2v89ArgumentsE.rel.text._ZN4node6Buffer10Utf8LengthERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer10ByteLengthERKN2v89ArgumentsE.rel.text._ZN4node6Buffer10ByteLengthERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer10AsciiWriteERKN2v89ArgumentsE.rel.text._ZN4node6Buffer10AsciiWriteERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer8HexWriteERKN2v89ArgumentsE.rel.text._ZN4node6Buffer8HexWriteERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer11Base64WriteERKN2v89ArgumentsE.rel.text._ZN4node6Buffer11Base64WriteERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer9Ucs2WriteERKN2v89ArgumentsE.rel.text._ZN4node6Buffer9Ucs2WriteERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer9Utf8WriteERKN2v89ArgumentsE.rel.text._ZN4node6Buffer9Utf8WriteERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer11BinaryWriteERKN2v89ArgumentsE.rel.text._ZN4node6Buffer11BinaryWriteERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer3NewEN2v86HandleINS1_6StringEEE.rel.text._ZN4node6Buffer3NewEN2v86HandleINS1_6StringEEE.text.unlikely._ZN4node6Buffer3NewEjPNS_7commonsE.rel.text._ZN4node6Buffer3NewEjPNS_7commonsE.text.unlikely._ZN4node6Buffer7ReplaceEPcjPFvS1_PvES2_.rel.text._ZN4node6Buffer7ReplaceEPcjPFvS1_PvES2_.text.unlikely._ZN4node6BufferC2EPNS_7commonsEN2v86HandleINS3_6ObjectEEEj.rel.text._ZN4node6BufferC2EPNS_7commonsEN2v86HandleINS3_6ObjectEEEj.text.unlikely._ZN4node6Buffer3NewERKN2v89ArgumentsE.rel.text._ZN4node6Buffer3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6BufferD2Ev.rel.text._ZN4node6BufferD2Ev.text.unlikely._ZN4node6BufferD0Ev.rel.text._ZN4node6BufferD0Ev.text.unlikely._ZN4node6Buffer3NewEPKcjPNS_7commonsE.rel.text._ZN4node6Buffer3NewEPKcjPNS_7commonsE.text.unlikely._ZN4node6Buffer3NewEPcjPFvS1_PvES2_PNS_7commonsE.rel.text._ZN4node6Buffer3NewEPcjPFvS1_PvES2_PNS_7commonsE.text.unlikely._ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE.rel.text._ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE.text.unlikely._ZN4node6Buffer14MakeFastBufferERKN2v89ArgumentsE.rel.text._ZN4node6Buffer14MakeFastBufferERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer4CopyERKN2v89ArgumentsE.rel.text._ZN4node6Buffer4CopyERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer7CompareERKN2v89ArgumentsE.rel.text._ZN4node6Buffer7CompareERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer13IndexOfNumberERKN2v89ArgumentsE.rel.text._ZN4node6Buffer13IndexOfNumberERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer11HasInstanceEN2v86HandleINS1_5ValueEEE.rel.text._ZN4node6Buffer11HasInstanceEN2v86HandleINS1_5ValueEEE.text.unlikely._ZN4node18RetainedBufferInfoC2EPNS_6BufferE.rel.text._ZN4node18RetainedBufferInfoC2EPNS_6BufferE.text.unlikely._ZN4node11WrapperInfoEtN2v86HandleINS0_5ValueEEE.rel.text._ZN4node11WrapperInfoEtN2v86HandleINS0_5ValueEEE.text.unlikely._ZN4node7IndexOfEPKcjS1_j.rel.text._ZN4node7IndexOfEPKcjS1_j.text.unlikely._ZN4node6Buffer13IndexOfStringERKN2v89ArgumentsE.rel.text._ZN4node6Buffer13IndexOfStringERKN2v89ArgumentsE.text.unlikely._ZN4node6Buffer13IndexOfBufferERKN2v89ArgumentsE.rel.text._ZN4node6Buffer13IndexOfBufferERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_node_buffer.cc.rel.text.startup._GLOBAL__sub_I_node_buffer.cc.rel.init_array.rel.data.rel.ro._ZTVN2v818RetainedObjectInfoE.rel.data.rel.ro._ZTVN4node10ObjectWrapE.rel.data.rel.ro._ZTVN4node6BufferE.rel.data.rel.ro._ZTVN4node18RetainedBufferInfoE.rel.data.rel.node_buffer_module.rodata._ZN4node18RetainedBufferInfo5labelE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group !#$%&()+,./1245689;<>?ABCEFHIKLNOQRTUWXZ[]^`acdfgijlmoprsuvxy{|~F.=4C 4I4O"4U.4[84aA4gK4mU4s`4yl4x444444444444444!4/4:4E4T4Am44 $AA|ALA!4'A-LA3A9A?4E4K4QAWA]4d4j4p$Aw54~4M4g4lAHAAATAATAA     "1"_" O%Ip!"$"$B"&4Ld-")&",f"/!0`f"/yS2 "65X5eC^&TCdCg Cj1 C[\ Ca h hv h h|@ hl xy C uI F% LU O U R tX `m> e     >J sx p  ?8|y )L"9Fl"<+_|J~2aPh` &GIxdLR!ou0aaNg-5<C/z",!" $1IV,!tnode_buffer.cc_GLOBAL__sub_I_node_buffer.cc_ZStL8__ioinit.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC23.LC24.LC25.LC26.LC27.LC28.LC29.LC30.LC31.LC32.LC33.LC34.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC43.LC49.LC48.LC54.LC55.LC63.LC62.LC60.LC61.LC73.LC72.LC70.LC71.LC75.LC78.LC80.LC90.LC97.LC100.LC98.LC99.LC102.LC103.LC106.LC104.LC105.LC109.LC108.LC112.LC111.LC118.LC119.LC122.LC121_ZN4node18RetainedBufferInfoD5Ev_ZN4node10ObjectWrapD5Ev_ZN2v818RetainedObjectInfo13GetGroupLabelEv_ZN2v818RetainedObjectInfo15GetElementCountEv_ZN2v818RetainedObjectInfo14GetSizeInBytesEv_ZN4node18RetainedBufferInfo7DisposeEv_ZN4node18RetainedBufferInfo12IsEquivalentEPN2v818RetainedObjectInfoE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN4node18RetainedBufferInfo5labelE_ZN4node18RetainedBufferInfo7GetHashEv_ZN4node18RetainedBufferInfo8GetLabelEv__x86.get_pc_thunk.cx_ZN4node18RetainedBufferInfoD2Ev_ZN4node18RetainedBufferInfoD1Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv_ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN4node18RetainedBufferInfoD0Ev_ZdlPv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN4node18RetainedBufferInfo14GetSizeInBytesEv_ZNK2v85Value8ToObjectEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN4node6Buffer10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node6Buffer3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN4node6Buffer11BinarySliceERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node6Buffer10AsciiSliceERKN2v89ArgumentsE_ZN4node6Buffer11Base64SliceERKN2v89ArgumentsE_ZN4node6Buffer9Ucs2SliceERKN2v89ArgumentsE_ZN4node6Buffer8HexSliceERKN2v89ArgumentsE_ZN4node6Buffer9Utf8SliceERKN2v89ArgumentsE_ZN4node6Buffer9Utf8WriteERKN2v89ArgumentsE_ZN4node6Buffer10AsciiWriteERKN2v89ArgumentsE_ZN4node6Buffer11BinaryWriteERKN2v89ArgumentsE_ZN4node6Buffer11Base64WriteERKN2v89ArgumentsE_ZN4node6Buffer9Ucs2WriteERKN2v89ArgumentsE_ZN4node6Buffer8HexWriteERKN2v89ArgumentsE_ZN4node6Buffer11ReadFloatLEERKN2v89ArgumentsE_ZN4node6Buffer11ReadFloatBEERKN2v89ArgumentsE_ZN4node6Buffer12ReadDoubleLEERKN2v89ArgumentsE_ZN4node6Buffer12ReadDoubleBEERKN2v89ArgumentsE_ZN4node6Buffer12WriteFloatLEERKN2v89ArgumentsE_ZN4node6Buffer12WriteFloatBEERKN2v89ArgumentsE_ZN4node6Buffer13WriteDoubleLEERKN2v89ArgumentsE_ZN4node6Buffer13WriteDoubleBEERKN2v89ArgumentsE_ZN4node6Buffer4FillERKN2v89ArgumentsE_ZN4node6Buffer4CopyERKN2v89ArgumentsE_ZN4node6Buffer7CompareERKN2v89ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZN4node6Buffer13IndexOfStringERKN2v89ArgumentsE_ZN4node6Buffer13IndexOfNumberERKN2v89ArgumentsE_ZN4node6Buffer13IndexOfBufferERKN2v89ArgumentsE_ZN4node6Buffer10ByteLengthERKN2v89ArgumentsE_ZN4node6Buffer10Utf8LengthERKN2v89ArgumentsE_ZN4node6Buffer14MakeFastBufferERKN2v89ArgumentsE_ZN4node6Buffer24SetFastBufferConstructorERKN2v89ArgumentsE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node11WrapperInfoEtN2v86HandleINS0_5ValueEEE_ZN2v812HeapProfiler18DefineWrapperClassEtPFPNS_18RetainedObjectInfoEtNS_6HandleINS_5ValueEEEE_ZN2v87Isolate10GetCurrentEv_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD0Ev_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v89UndefinedEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZNK2v85Value11NumberValueEv_ZNK2v85Value12BooleanValueEv_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v86Number3NewEd_ZN2v89Exception10RangeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZNK2v85Value8IsNumberEv_ZNK2v85Value8IsUint32Ev_ZNK2v85Value11Uint32ValueEv_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZNK2v85Value7IsInt32Ev_ZNK2v85Value10Int32ValueEv_ZN4node11StringBytes6EncodeEPKcjNS_8encodingE_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZNK2v85Value12IntegerValueEvmemset_ZNK2v85Value8ToStringEv_ZNK2v86String10Utf8LengthEv_ZN2v87Integer3NewEiPNS_7IsolateE_ZN4node11StringBytes4SizeEN2v86HandleINS1_5ValueEEENS_8encodingE_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEv_ZN4node13ParseEncodingEPKciNS_8encodingE_ZN6jxcore8JXStringD1Ev_ZNK2v86String6LengthEv_ZN4node11StringBytes5WriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEPi_ZN4node6Buffer3NewEN2v86HandleINS1_6StringEEE_ZN2v87Context10GetCurrentEv_ZN2v87Context6GlobalEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZNK2v88Function11NewInstanceEiPNS_6HandleINS_5ValueEEE_ZN4node6Buffer3NewEjPNS_7commonsE_ZN2v87Integer15NewFromUnsignedEjPNS_7IsolateE_ZN4node7commons11getInstanceEv_ZN4node6Buffer7ReplaceEPcjPFvS1_PvES2__ZN2v86Object39SetIndexedPropertiesToExternalArrayDataEPvNS_17ExternalArrayTypeEi_ZdaPv_ZN2v82V837AdjustAmountOfExternalAllocatedMemoryEi_Znaj_ZN4node6BufferC2EPNS_7commonsEN2v86HandleINS3_6ObjectEEEj_ZTVN4node6BufferE_ZN2v82V817SetWrapperClassIdEPPNS_8internal6ObjectEt_ZN4node6BufferC1EPNS_7commonsEN2v86HandleINS3_6ObjectEEEj_ZN4node24FromConstructorTemplateXEN2v86HandleINS0_16FunctionTemplateEEERN6jxcore10PArgumentsE_Znwj_ZN4node6BufferD2Ev_ZN4node6BufferD1Ev_ZN4node6BufferD0Ev_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZN4node6Buffer3NewEPcjPFvS1_PvES2_PNS_7commonsE_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZNK2v85Value8IsObjectEv_ZN2v86Object41GetIndexedPropertiesExternalArrayDataTypeEv_ZN2v816FunctionTemplate11HasInstanceENS_6HandleINS_5ValueEEE_ZN2v86Object14GetConstructorEv_ZNK2v85Value12StrictEqualsENS_6HandleIS0_EEmemmovememcmpmemchr_ZN4node6Buffer11HasInstanceEN2v86HandleINS1_5ValueEEE_ZN4node18RetainedBufferInfoC2EPNS_6BufferE_ZTVN4node18RetainedBufferInfoE_ZN4node18RetainedBufferInfoC1EPNS_6BufferE_ZN4node7IndexOfEPKcjS1_j_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZTVN2v818RetainedObjectInfoE__cxa_pure_virtualnode_buffer_module $  !5 "  0KZ  (:H $,4=Yk  #8\ b ~     4X ^ z    0T Zv   ,P Vr   (L Rn}   $H Njy    D Jfu   @ Fbq     <  B ^ m        8  > Z i }        4  : V e y         *  0 !L ^  g    "       #< N  W q    $      %,> G a &   '. 7 X(|)*+ ), 5.@/ .IX`  $,[1gx2132  '/G2]1i3v45 DR6r722 (89% @(R:d9v3  '/G2]1i3v45 DR6u722 (89% @(R:d9v3  '/G2]1i3v45 DR6722 (8- H(Z:l9  '/G2]1i3v45 DR6722 *(<8M h(z:9  '/J2`1l3y5 (:9%2M;y<4=622DRn (8 22  '/J2`1l3y5 (:9%2M;y<4=622<Jj (8 22  '/J2`1l3y5 (:9%2M;y<4=6/2G2lz (8 2 2  '/J2`1l3y5 (: 93=2e;<4=6O2g2 (89  ((::G2b2  "U>t (:930?\?z@@A32/2L2j }(B93 (: 92:  "U>t (:930?\?z@@A32/2L2j }(B93 (: 92:  "U>t (:930?\?z@@A32/2L2j }(B93 (: 92:  "U>t (:930?\?z@@A32/2L2j }(B93 (: 92:  "U>t (:930?\?z@@A32/2L2j }(B93 (: 92:  "U>t (:930?\?z@@A32/2L2j }(B93 (: 92:  %B U(g:y93???9CCCD2 13/2L2d2>2C22 (B19J Z  "*2_ r(:9321*E8FKG]3z22  '/[ v(:93213SEHG2225I^JlKLM2  '/R2h1t3> (:9(3N1G E; \)h32@ (:$9?2_2OGE )(G]=GE )32?2  '/R2h1t3> (:9(3N1 2'2T@ (:9GE/ P)\3w2OGE *)@Gu=GE ) 3!2L2  '/R2h1t3> (:9(3N1G E; \)h32@ (:$9?2_2OGE )(G]=GE )32?2  '/R2h1t3> (:9(3N1G E; \)h32@ (:$9?2_2OGE )*G]=GE )32?2  '/R2h1t3> (:9(3N1G E; \)h32@ (:$9?2_2OGE )(G]=GE )32?2  '/R2h1t3> (:9(3N1G E; \)h32@ (:$9?2_2OGE )(G]=GE )32?2  $,DQVRtES1T3, *FVe1q T>W ,,V  +VYE0);aZw[,\[ ^?V\o.z/_X  '/b1xa321= (*8<9U2b`3 ^KXQe d$ *GVf1r T>XW)6,MV *GVf1r T>XW)6,MV i:Hju1klm,  '/G2]1i3vh (:9;>]~== (8 2W2o22 Y  '/O2e1q3~>h 6,:p=nG_2th (:9222=2)=B X(j8|93  (822'2B vG  '/fhw (B932 1#h=K`n66oG 0(BBT9f3  '/[;h (B93h*?M6h==pG21'2= X(jB2G2 W$h s 0>>bLt ^o  '/e (B93h I6JHVky6G3M21!32 P(bBt9;4K$uGGY3r222  '/mh (B932 1#hCQft66 G3D;d4 uG2/2  v( w2x:y{ {{{  0-d e-  $((  @T h $Hl!#4%\'*,.0L2|468 :<<l>@BD,F\HJLNPLR|TVX Z<\|^`bd$fThjln pD rt t v x z0 |` ~   4 @ L Xl x   -z^s!',g Fy  @5@O1 @  @8!M}B @P &Es -o @p)NP& @,vf @0/:|Sx @(22C   @@6GwLs @8(9LPl @`8<40 @`?v2`` @C?; @Fut!!u @I#/ $+ @pLe & & @8O )" ) @0RY , , @(U / /t @ XM $3 03C @8[ t6 6C @(^3 9r 9Cn @a =  =C @d d@[ p@CW @g C CC @jG;G`7 @mhpJpJ @pLL @xsRNNh @H`v8T@Tx @hy6YxYht @`|(_0_h @p`d]dhY @ `jjh @0 `xoHo D @ p}ppG @ hqqd @h xETt`t @ P:u @u  @09w` w\ @@zww0 @ wwa @8p Ryd`ya` @pzz @P@{{ @h~~ @P`$ a ] @ @ V/R @ ЉЉ" @HyD @(y @  @(GΎЎ> @0F @08#X @h3`, / @p8b^ @  @ ,  @H @0)=Y u0(~78  @H tcp_wrap.o/ 1560953073 501 20 100644 33608 ` ELFt4(]ZPUUSd$싓D$ R$d$[]UVSd$t$ 4$4$d$[^]TCPfdcloserefunrefreadStartreadStopshutdownwriteBufferwriteAsciiStringwriteUtf8StringwriteUcs2Stringopenbindlistenconnectbind6connect6getsocknamegetpeernamesetNoDelaysetKeepAlivereq_.data == this../src/jx/commons.h../src/wrappers/tcp_wrap.ccdomainIPv6IPv4addressnode_tcp_wrapUWEVǍuSd$$E<$$EЋD$ D$4$D$}ԃ4$|$EԃD$$D$4$L$MEԃ<$D$EЅ EċE$E$EčD$ 4$T$D$Eԃ|$4$EEăD$D$ED$D$T$D$D$ $D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$|$4$Uԃ1t$MЉ|$4$Eȃ4$D$D$}Eԃ|$D$ D$E$Ẻ$e[^_]Í&UWVS$tE0@xEĉ$EU GIEEt $EGk$MEGL$M EE$L$EEUUS$E؋EME$E܋E$EG$5$EE$E$$EED$E$GMUԉT$D$UED$L$T$ $FVFVP;vt$4$E$e[^_]ËMGL$M EE$L$EUUԋEEE&Et&Et&WE$T$EUD$T$G$&ED$D$ D$$TCPWrap: Aborting due to unwrap failure at %s:%d This process is restricted and can not listen given portUW}VSd$ĉ<$E PMЋJyD$ $ƅE @E @$$D$4$EЃ8P(tEԉ$Uԃ1t $<$D$M<$Ee[^_]t&r hFxu vWEԉ$Eԃ]fD$ D$D$$UW}VSd$<$E PJyD$ $ƅE @E MԉMċ@$D$F$$Eĉ$Uԃ1t $<$D$M<$Ee[^_]vr cFxuhvREԉ$EEԃ[&VEȋ$T$EȃỦD$T$F$=&D$ gD$D$$UW}VSd$<$E PJyD$ $ƅNE @E MԉMċ@$EE xE @$D$ED$F$$Eĉ$Uԃ1t $<$D$M<$Ee[^_]r ;Fxv&t&Eĉ$EԃOfEԉ$EEԃ&VEȋ$T$EȃỦD$T$F$&D$ pD$D$$UWEVSd$u $E~P}MJyUD$ $Dž@VG҉EGFMԉM$E}~]~~?F$E}tG~fF$t+)vE$Eԃ봐t&Eƃ9E$Ht$ D$ED$G$$$Et$D$E$EԃD$Eĉ$UEĉ$Ee[^_]&B PzxEԉ$EEԃ&EUȋ$L$ŨEȉT$D$W$8&E$Eԃf!}D$ED$ <$D$Eԃ<$D$Eԃ<$D$EԃD$Eĉ$MD$ D$D$$UWEVS$tu $E~PMJyED$ $EM~BFMM$EJƒEҍ}<$HЉUUVҋUCFD$D$<$U<$UM؉D$ $T$E؃D$E܉D$ED$ ED$E$$uD$Et$$ED$E$M<$E$Ee[^_]B PzX@Et&E$EE$E~F$vE$EU&uUEN$L$EUD$T$V$EE$EbfE}D$ED$ <$D$E<$D$E<$D$ED$E$}sD$ D$D$$UWEVS$du $E~PMJy]D$ $EE@~ETFMM$E\ƒEҍ}<$HЉU|VҋURFD$D$<$U<$UM̉D$ $T$ẼD$EЉD$EԉD$ E؉D$E܉D$ED$ED$E$$MD$EL$$ED$E$u<$E$Ee[^_]B PzX@Et&E$EE$E~F$t&E$EU&EUE$L$EUD$ET$P$EE$EbfE}D$ED$ <$D$E<$D$E<$D$ED$E$}yD$ D$D$$UWEVS$4u $|PpJyD$ $EU~F$ǍE$EFFuD$D$4$4$D$Ủ|$$$0ƋExE$xlE$tU1t$T$$hdD$lD$ D$t$hUD$tT$$MƒZdD$ hD$lD$t$Eht1tl$lL$tD$ $L$FP FVB x$D$$ẺD$EЉD$ EԉD$E؉D$E܉D$ED$ED$ E$D$F$v1t $D$|$ME$|$Ee[^_]B Pz@Et&E$E'fE$Ef}EW$T$EUD$T$G$FVFVP;vt$4$p8P(E$UE419Pz@  D$ dD$D$$D$D$ D$$UWEVS$Tu $EPMJyD$ $EU~F$ǍE$EFFuD$D$4$4$D$Uȉ|$$$0ƋEx|E؉$E|E$EU1t$T$$xtD$|D$ D$E$xUD$ET$$Mƒ4tD$ xD$|D$E$ExE1t|$|L$MD$ $L$FP FVB E$D$EȉD$ẺD$ EЉD$EԉD$E$D$F$v1t $D$E$ME$E$Ee[^_]&B Pz@E3t&E$EYfE$Ef}EW$T$EUD$T$G$FVFVP;vt$4$E8P(E$Ut&Ef1ePz@ &D$ ID$D$$D$D$ D$$UWVSd$ċ} t\u؉4$1t $D$Uԉ$Eԃ4$D$M4$Ee[^_]u؉lj4$u UWEVSd$$EEp~FU$EE U:Eĉ$EUă$$EԋVE$T$EUD$T$F$}D$<$EԉD$ED$D$ ED$F<$D$E$e[^_]Ív(EĉE?ERvE EEĉEF $D$EăEPzt;ED$$$D$E$`EEvP t΋J1yuËB뾍>UVSd$uD$4$e[^]USd$D$ Jyt D$l$$d$[]Ðt&R tJ1yuߋBd$[]D$$UWVSd$t$0D$44$~$D$|$@|$F$F4$D$d$[^_]UWVuSd$ĉ4$E Mԋ@ $D$}ԃ$$|$|$4$U4$Ee[^_]UWEVǍuS$t$E<$$4$EEEff HEUD$ EED$.D$ $HL$EPD$ 4$fU fEET$D$E4$T$EED$ D$ED$E$D$ U D$4$T$E4$T$EED$ D$ED$E$U E4$T$D$E4$T$EED$ D$YfD$ D$E 4$D$D$E }D$ 4$D$D$ |$ED$E$uE4$D$M4$Ee[^_]vEUD$ EED$.D$$HL$EPD$ 4$fU fEET$D$E4$T$EED$ D$ED$E$D$ UWVXS$$4$E P8J8yD$ $Dž(ThD$G$L$$DžT44twO@$L$@DD$T$G$88P(t<$<1t4$(v8::~ReqWrap() [with T = uv_connect_s] $$GCC: (GNU) 4.9.x 20150123 (prerelease)zR|  1AB AkA $@0AB BhAA 0h AB EF AAA H ,AB C AAA A ,AAB AE AAA G ,AB AE AAA F ,,AB AE AAA I ,\AB F AAA J ,)AB Fs AAA I ,AAB F AAA C ,AB F# AAA I ,sAB F AAA J ,LAB Cl AAA C ,|AB F( AAA D $5AB BiCA 4_AA O g  AAF \ AA ( hAB C^AAA ,L|AB BDmAAA 0|AB EF1 AAA F 0AB BGI AAA H 0AB BGI AAA H $FAB B~AA @.symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node7TCPWrapD2Ev.rel.text._ZN4node7TCPWrapD2Ev.text.unlikely._ZN4node7TCPWrapD0Ev.rel.text._ZN4node7TCPWrapD0Ev.rodata.str1.1.text.unlikely._ZN4node7TCPWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node7TCPWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node7TCPWrap12AfterConnectEP12uv_connect_si.rel.text._ZN4node7TCPWrap12AfterConnectEP12uv_connect_si.rodata.str1.4.text.unlikely._ZN4node7TCPWrap4OpenERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap4OpenERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap10SetNoDelayERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap10SetNoDelayERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap12SetKeepAliveERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap12SetKeepAliveERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap6ListenERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap6ListenERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap4BindERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap4BindERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap5Bind6ERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap5Bind6ERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap8Connect6ERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap8Connect6ERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap7ConnectERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap7ConnectERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap14InstantiateCOMEPNS_7commonsE.rel.text._ZN4node7TCPWrap14InstantiateCOMEPNS_7commonsE.text.unlikely._ZN4node7TCPWrap12OnConnectionEP11uv_stream_si.rel.text._ZN4node7TCPWrap12OnConnectionEP11uv_stream_si.text.unlikely._ZN4node7TCPWrap11InstantiateEv.rel.text._ZN4node7TCPWrap11InstantiateEv.text.unlikely._ZN4node7TCPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE.rel.text._ZN4node7TCPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE.text.unlikely._ZN4node7TCPWrap8UVHandleEv.text._ZN4node7TCPWrap8UVHandleEv.text.unlikely._ZN4node7TCPWrapC2EN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node7TCPWrapC2EN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node7TCPWrap3NewERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap3NewERKN2v89ArgumentsE.text.unlikely._ZN4node11AddressToJSEPN2v87IsolateEPK8sockaddr.rel.text._ZN4node11AddressToJSEPN2v87IsolateEPK8sockaddr.text.unlikely._ZN4node7TCPWrap11GetSockNameERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap11GetSockNameERKN2v89ArgumentsE.text.unlikely._ZN4node7TCPWrap11GetPeerNameERKN2v89ArgumentsE.rel.text._ZN4node7TCPWrap11GetPeerNameERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_tcp_wrap.cc.rel.text.startup._GLOBAL__sub_I_tcp_wrap.cc.rel.init_array.rodata._ZZN4node7ReqWrapI12uv_connect_sED4EvE19__PRETTY_FUNCTION__.rel.data.rel.ro._ZTVN4node7TCPWrapE.rel.data.rel.node_tcp_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    5O!"$%'(*+-.0134679:;<>?ABDEGHJKIFKdTMOPRTUWXs x }   ! * 3 ? P ` p u z 4      % V+1@UVl10  "Ak|?Ol$He?l1jA)"*Ts+A%(E H4 c    5 M j           ' E Q _          : ] m 1    2p%4.c54_7:h<I!Ph<*BZgzRtcp_wrap.cc_ZZN4node7ReqWrapI12uv_connect_sED4EvE19__PRETTY_FUNCTION___GLOBAL__sub_I_tcp_wrap.cc_ZStL8__ioinit.LC2.LC3.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC23.LC25.LC26.LC28.LC29.LC33.LC37.LC47.LC49.LC50.LC48_ZN4node7TCPWrapD2Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZTVN4node10StreamWrapE_ZN4node10HandleWrapD2Ev_ZN4node7TCPWrapD1Ev_ZN4node7TCPWrapD0Ev_ZdlPv_ZN4node7TCPWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node7TCPWrap3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10StreamWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN4node10StreamWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN2v814ObjectTemplate11SetAccessorENS_6HandleINS_6StringEEEPFNS1_INS_5ValueEEENS_5LocalIS2_EERKNS_12AccessorInfoEEPFvS7_NS6_IS4_EESA_ES5_NS_13AccessControlENS_17PropertyAttributeENS1_INS_17AccessorSignatureEEE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN4node10StreamWrap9ReadStartERKN2v89ArgumentsE_ZN4node10StreamWrap8ReadStopERKN2v89ArgumentsE_ZN4node10StreamWrap8ShutdownERKN2v89ArgumentsE_ZN4node10StreamWrap11WriteBufferERKN2v89ArgumentsE_ZN4node10StreamWrap16WriteAsciiStringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteUtf8StringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteUcs2StringERKN2v89ArgumentsE_ZN4node7TCPWrap4OpenERKN2v89ArgumentsE_ZN4node7TCPWrap4BindERKN2v89ArgumentsE_ZN4node7TCPWrap6ListenERKN2v89ArgumentsE_ZN4node7TCPWrap7ConnectERKN2v89ArgumentsE_ZN4node7TCPWrap5Bind6ERKN2v89ArgumentsE_ZN4node7TCPWrap8Connect6ERKN2v89ArgumentsE_ZN4node7TCPWrap11GetSockNameERKN2v89ArgumentsE_ZN4node7TCPWrap11GetPeerNameERKN2v89ArgumentsE_ZN4node7TCPWrap10SetNoDelayERKN2v89ArgumentsE_ZN4node7TCPWrap12SetKeepAliveERKN2v89ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v811HandleScopeD1Ev_ZN2v87Isolate10GetCurrentEv_ZN4node7TCPWrap12AfterConnectEP12uv_connect_si_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v84TrueEv_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectEuv_last_error_ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s__assert2_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZNK2v85Value12IntegerValueEvuv_tcp_open_ZN2v84NullEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v89UndefinedEvstderrfprintfabort_ZNK2v85Value12BooleanValueEvuv_tcp_nodelay_ZNK2v85Value11Uint32ValueEvuv_tcp_keepalive_ZN4node7commons15GetTCPSBoundaryEv_ZN4node7commons14GetTCPBoundaryEv_Z10customLocki_ZN4node7TCPWrap12OnConnectionEP11uv_stream_siuv_listen_jx_Z12customUnlocki_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEvuv_ip4_addruv_tcp_bind_ZN6jxcore8JXStringD1Evuv_ip6_addruv_tcp_bind6_Znwj_ZN2v86Object3NewEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEEuv_tcp_connect6uv_tcp_connect_ZN4node7TCPWrap14InstantiateCOMEPNS_7commonsE_ZNK2v88Function11NewInstanceEv_ZN4node7commons11getInstanceEvuv_accept_ZN4node7TCPWrap11InstantiateEv_ZN4node7TCPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7TCPWrap8UVHandleEv_ZN4node7TCPWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node10StreamWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_stream_s_ZTVN4node7TCPWrapEuv_tcp_init_ZN4node10StreamWrap20UpdateWriteQueueSizeEPKNS_7commonsE_ZN4node7TCPWrapC1EN2v86HandleINS1_6ObjectEEE_ZNK2v85Value8ToObjectEv_ZN4node11AddressToJSEPN2v87IsolateEPK8sockaddruv_inet_ntopuv_tcp_getsocknameuv_tcp_getpeername_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10StreamWrap9SetHandleEP11uv_handle_snode_tcp_wrap_modulee fg&he fi$ke f$m,n4o=pYqkrs @tuvw AxryWz]{yq Bt|}~q  Ct/|S}Yuq Dt|}q Et+|O}Uqq Ft|}q Gt'|K}Qmq Ht|}q It#|G}Miq} Jt|}q K t|C}Ieqy Lt|}q Mt|?}Eaqu Nt|}q Ot|;}A]qq Pt|}q Qt |7 }= Y qm R| t | }  q S t |3 }9 U qi Tx t | }  q U t |/ }; O d  t   e f-mc{7Idkd V 9 W e fmIr~ X$ Y.8= e fmDp,Hb Xl Yv e fmDp/Jt X Y e f"mR~/=[p= ZXxj| X Y e f%mR~&DYfqB^w Zx X  Y % e f%mRDbw'Wv Zx X$ Y.8= e f(mU{m2Rdp [xx,P!gkZ Xd Ynx} V 9 W e f%mOum&FXd [xx5fl/Gok" X, Y6@ES V] 9g Woe f#m9HZgym e fmNv)}e f#e f0e f,2L[ e fm4FR^ke f'm/n7oAx \%x@d{ ]x ^x'4sx _ e f"mR(=J X Y e f"mR(=J X Ye f <( 2:5i j l Dl  0` P!#%')$+P-/135D= 4 [l @[ H[eP!P'P,PTP1P @c [o0 @0c [ 22   @Pc[J   @g[2m A  @h[;R}`y @8i[ @i[-jf @hj[) @`k["?A; @hl[%n"0 @pm`[(##s @n`[+NT(`( @0pP[.() @p[1<*o+5k @q[46+@+_ @q[7+=+_++h @0q0[<, ,|  @`q@[?;,~,z @q[B// @r[E- Z1p `1l @s[H 3  3F @s8[K h3 @s[M 35 U 3Q @s[Pz 3v @s[R 3 3 03(  4  4P @t[X\8 TC \d Pudp_wrap.o/ 1560953074 501 20 100644 34636 ` ELF|u4(roejUWVSd$p0Džt4$4$G0d$[^_]USd$싓D$ R$d$[]UVSd$t$ 4$4$d$[^]UWVSd$ԋE }HqtKAt $|$D$F0$D$E|$$Ee[^_]t&MMUWVS$tEEEĉ$EE@xEEEE@t $EE uU O04$L$I‰D$ED$ ED$M EEH1t $EԍE$L$UET$$4$D$EԉD$ED$|$D$ E4$D$E$e[^_]Í&UD$4$E؉UE$MU4$)T$L$EU4$E܋E T$D$EU4$EET$D$EE䋇4$D$EԋUD$E|$4$T$D$D$ E$e[^_]fEUDPfdbindsendbind6send6closerecvStartrecvStopgetsocknameaddMembershipdropMembershipsetMulticastTTLsetMulticastLoopbacksetBroadcastsetTTLrefunrefreq_.data == this../src/jx/commons.h../src/wrappers/udp_wrap.ccdomainnode_udp_wrapUWEVǍuSd$$E<$$E̋D$ D$4$D$Mԃ4$L$ωMEԃD$$D$4$L$MEԃ<$D$E̅ E$$M̉$D$L$EM̋EA0D$$|$D$ 4$D$EЃ4$}ԉD$|$D$D$ED$D$D$D$ $D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԃD$4$T$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$E|$D$ D$Eԉ$D$ D$4$D$EԍT$D$4$EEЃ4$}ԉD$ED$ |$D$Eԉ$EЉ4$D$Uԃ1t$M̉EЉ4$D$Eă4$D$D$}Eԃ|$D$ D$E$Eȉ$e[^_]ÍvUWVSd$E8@@pEEȉ$EEU Et $EE@($UEE$T$U ET$EMM$E܋E E$E0D$E$MUE$L$T$uD$4$EUM؋@L$MD$D$T$4$L$ GOGOH;t$<$E$e[^_]fUE$ET$U T$MM؋EEEt&E$L$EUĉ$T$9E D$D$ D$$UDPWrap: Aborting due to unwrap failure at %s:%d This process is restricted and can not listen given portUWVuSd$ĉ4$E P8JyteD$ $tf$D$Uԉ|$$Eԃ4$D$}4$Ee[^_]t&B tPzu@뙍vD$ D$D$$UWVuSd$ĉ4$4$$EPJytYD$$tZPdT$Eԉ|$$Eԃ4$D$}4$Ee[^_]B tPzu@륍v뢐jUWVXS$$4$E P8JyD$ $HTT$$hT$4DžT88tn4@$T$D@T$$?W(t<$<1t/$#t&T$<|$$<4$D$}4$Ee[^_]vB Pzu @t&D$ D$D$$UWVuSd$ĉ4$E PJyD$ $x$T$T$uJẺ$Ũ1t $D$4$M4$Ee[^_]vEЉ$EȉT$}tEȉT$$UԃEЉT$$Ẻ$Ũ1t $D$4$}fB Pzu @t&D$ D$D$$UWVuSd$} 4$UċPJyD$ $AEGG}ԉ$MMD$ $t3EUȋE$L$EȃỦ$T$EUĉD$<$T$Eԃ4$D$}4$Ee[^_]&J ;Axu+I*vM}ԉ<$EԃM*t&D$ mD$D$$UWVuSd$} 4$UċPJyD$ $AEGG}ԉ$MMD$ $t3EUȋE$L$EȃỦ$T$EUĉD$<$T$Eԃ4$D$}4$Ee[^_]&J ;Axu+I*vM}ԉ<$EԃM*t&D$ kD$D$$UWVuSd$} 4$UċPJyD$ $AEGG}ԉ$MMD$ $t3EUȋE$L$EȃỦ$T$EUĉD$<$T$Eԃ4$D$}4$Ee[^_]&J ;Axu+I*vM}ԉ<$EԃM*t&D$ lD$D$$UWVuSd$} 4$UċPJyD$ $AEGG}ԉ$MMD$ $t3EUȋE$L$EȃỦ$T$EUĉD$<$T$Eԃ4$D$}4$Ee[^_]&J ;Axu+I*vM}ԉ<$EԃM*t&D$ jD$D$$UWVSd$t$0D$44$~D$|$@|$F$v$d$[^_]UWVuSd$ĉ4$E Mԋ@ $D$}ԃ$x$|$|$4$U4$Ee[^_]UWEVS$Du $EPJyD$ $EE@tx}<$P}@D$D$<$x@$|xR@$ |HЃ}M} <$||M̉D$ $T$Ẽt$ D$EЉD$EԉD$ E؉D$E܉D$ED$ED$E$.xUD$$L$ED$E$M<$E$Ee[^_]vvB Pz`@EHt&E$EpfE$EfE$Eff<$||MD$ $T$Et$D$ED$EĉD$ EȉD$E$EUt$L$EU$T$Et&ESuD$xD$ 4$D$E4$D$E4$D$SxD$ 5D$D$$UW}VSd$ċu <$FD$uЉEԍEЉD$E$<$Ee[^_]UW}VSd$ċu <$FD$ uЉEԍEЉD$E$<$Ee[^_]UWEVSd$u $EPJyD$ $EE@EgE}<$P@MMD$D$<$Ẻ$E~x5PRуuBx0&~vKxv@ƒxt@D$ED$$E$<$D$EUt$T$ $t-ME$T$EU$T$Et$D$E$uE4$D$ME$<$4$Ee[^_]fE$EЃBxt&B tQPz@EE$EE"&E$EzfEE$E|fPz[@ vHEvD$ vD$D$$&B UW}VSd$ċu <$FD$uЉEԍEЉD$E$<$Ee[^_]UW}VSd$ċu <$FD$uЉEԍEЉD$E$<$Ee[^_]UWEVS$4$tE PJyD$ $||)pdE P@}}D$E$EEE x@$pE xG@$$|l'Ẻ$xhE$U1t$~T$$`\D$hD$ D$E$`UD$ET$$Mƒy\D$ `D$hD$E$E`h1t$`L$hD$ $L$GP GWB x$$x0D$E$xME$L$D$MEL$$E$pMl $D$T$hE x#@ $pE$EE x @D$ED$$}} aE$pỦD$$L$|D$ D$,ẼL$D$EЉD$EԉD$E؉D$E܉D$ ED$$ED$(hD$G$E$T$EU$T$GWGWP;Nt$<$d8P(tE$U1t $D$t$uE$t$Ee[^_]vvJ <AxwA|2E$EfE$EnfE$EfE$EfE$EE&E$pUD$$L$|D$ D$ EL$D$ED$EĉD$EȉD$hD$G$xfDžxc|t&1 Pzz@ gdD$ D$D$$D$D$ D$$UW}VSd$ċu <$FD$uЉEԍEЉD$E$<$Ee[^_]UW}VSd$ċu <$FD$ uЉEԍEЉD$E$<$Ee[^_]USd$D$ Jyt D$l$$d$[]Ðt&R tJ1yuߋBd$[]UWVuSd$ĉ4$}4$$tO1t $D$Uԉ$Eԃ4$D$4$e[^_]fEUD$UVSd$4$t$D$$d$[^]node::ReqWrap::~ReqWrap() [with T = uv_udp_send_s] $GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (CAB CyAAA  H1AB AkA $l0AB BhAA ,}AB C` AAA G <5AB C? AAA H  AAA C 0 AB EF AAA D ,8OAB C AAA C ,hAB BD AAA G ,AB BD AAA C 0AB BG; AAA F ,AB BD AAA F ,,yAB BD AAA J ,\yAB BD AAA J ,yAB BD AAA J ,yAB BD AAA J (\AB CRAAA ,|AB BDmAAA ,HAB F AAA F ,x^AB AEOAAA ,^AB AEOAAA ,+AB F AAA E ,^AB AEOAAA ,8^AB AEOAAA ,hAB F AAA F ,^AB AEOAAA ,^AB AEOAAA 4_AA O g  AAF \ AA,0AB BDw AAA E `$tFAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node7UDPWrap19DeleteSlabAllocatorEPv.rel.text._ZN4node7UDPWrap19DeleteSlabAllocatorEPv.text.unlikely._ZN4node7UDPWrapD2Ev.rel.text._ZN4node7UDPWrapD2Ev.text.unlikely._ZN4node7UDPWrapD0Ev.rel.text._ZN4node7UDPWrapD0Ev.text.unlikely._ZN4node7UDPWrap7OnAllocEP11uv_handle_sj.rel.text._ZN4node7UDPWrap7OnAllocEP11uv_handle_sj.text.unlikely._ZN4node7UDPWrap6OnRecvEP8uv_udp_si8uv_buf_tP8sockaddrj.rel.text._ZN4node7UDPWrap6OnRecvEP8uv_udp_si8uv_buf_tP8sockaddrj.rodata.str1.1.text.unlikely._ZN4node7UDPWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node7UDPWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node7UDPWrap6OnSendEP13uv_udp_send_si.rel.text._ZN4node7UDPWrap6OnSendEP13uv_udp_send_si.rodata.str1.4.text.unlikely._ZN4node7UDPWrap8RecvStopERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap8RecvStopERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE.rel.text._ZN4node7UDPWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE.text.unlikely._ZN4node7UDPWrap11GetSockNameERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap11GetSockNameERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap9RecvStartERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap9RecvStartERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap20SetMulticastLoopbackERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap20SetMulticastLoopbackERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap12SetBroadcastERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap12SetBroadcastERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap15SetMulticastTTLERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap15SetMulticastTTLERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap6SetTTLERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap6SetTTLERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrapC2EN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node7UDPWrapC2EN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node7UDPWrap3NewERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap3NewERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap6DoBindERN6jxcore10PArgumentsEi.rel.text._ZN4node7UDPWrap6DoBindERN6jxcore10PArgumentsEi.text.unlikely._ZN4node7UDPWrap4BindERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap4BindERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap5Bind6ERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap5Bind6ERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap13SetMembershipERN6jxcore10PArgumentsE13uv_membership.rel.text._ZN4node7UDPWrap13SetMembershipERN6jxcore10PArgumentsE13uv_membership.text.unlikely._ZN4node7UDPWrap13AddMembershipERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap13AddMembershipERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap14DropMembershipERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap14DropMembershipERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap6DoSendERN6jxcore10PArgumentsEi.rel.text._ZN4node7UDPWrap6DoSendERN6jxcore10PArgumentsEi.text.unlikely._ZN4node7UDPWrap4SendERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap4SendERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap5Send6ERKN2v89ArgumentsE.rel.text._ZN4node7UDPWrap5Send6ERKN2v89ArgumentsE.text.unlikely._ZN4node7UDPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE.rel.text._ZN4node7UDPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE.text.unlikely._ZN4node7UDPWrap11InstantiateEv.rel.text._ZN4node7UDPWrap11InstantiateEv.text.unlikely._ZN4node7UDPWrap8UVHandleEv.text._ZN4node7UDPWrap8UVHandleEv.text.unlikely._GLOBAL__sub_I_udp_wrap.cc.rel.text.startup._GLOBAL__sub_I_udp_wrap.cc.rel.init_array.rodata._ZZN4node7ReqWrapI13uv_udp_send_sED4EvE19__PRETTY_FUNCTION__.rel.data.rel.ro._ZTVN4node7UDPWrapE.rel.data.rel.node_udp_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    6d!"$%'(*+-.0134679:<=?@BCEFHIKLNOQRTUWXZ[]^_`JF`eibdegijlmty~ #-6BP_o4kC(j>Tt1 !e1 0},d5We1h "?|:f#@)"oB^@j^R ^C= ^Uf  (  % ^IN ^L y1 y+ y. y4I t    B Ol      S Z b h {       1@\7n\7=0n?n+FO8_X[ ^'?Ldqgudp_wrap.cc_ZZN4node7ReqWrapI13uv_udp_send_sED4EvE19__PRETTY_FUNCTION___GLOBAL__sub_I_udp_wrap.cc_ZStL8__ioinit.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC24.LC25.LC27.LC28.LC39.LC46_ZN4node7UDPWrap19DeleteSlabAllocatorEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN4node7commons11getInstanceEv_ZN4node13SlabAllocatorD1Ev_ZdlPv_ZN4node7UDPWrapD2Ev_ZTVN4node7UDPWrapE_ZN4node10HandleWrapD2Ev_ZN4node7UDPWrapD1Ev_ZN4node7UDPWrapD0Ev_ZN4node7UDPWrap7OnAllocEP11uv_handle_sj_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN4node13SlabAllocator8AllocateEN2v86HandleINS1_6ObjectEEEjuv_buf_init_ZN2v87Isolate10GetCurrentEv_ZN4node7UDPWrap6OnRecvEP8uv_udp_si8uv_buf_tP8sockaddrj_ZN2v811HandleScopeC1Ev_ZN4node13SlabAllocator6ShrinkEN2v86HandleINS1_6ObjectEEEPcjuv_last_error_ZN4node8SetErrnoE8uv_err_s_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN2v811HandleScopeD1Ev_ZNK2v85Value8ToObjectEv_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v87Integer3NewEiPNS_7IsolateE_ZN4node11AddressToJSEPN2v87IsolateEPK8sockaddr_ZN4node7UDPWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node7UDPWrap3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_Znwj_ZN4node13SlabAllocatorC1EjPNS_7commonsE_ZN4node6AtExitEPFvPvES0__ZN2v86String3NewEPNS_7IsolateEPKci_ZN4node7UDPWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN2v814ObjectTemplate11SetAccessorENS_6HandleINS_6StringEEEPFNS1_INS_5ValueEEENS_5LocalIS2_EERKNS_12AccessorInfoEEPFvS7_NS6_IS4_EESA_ES5_NS_13AccessControlENS_17PropertyAttributeENS1_INS_17AccessorSignatureEEE_ZN4node7UDPWrap4BindERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node7UDPWrap4SendERKN2v89ArgumentsE_ZN4node7UDPWrap5Bind6ERKN2v89ArgumentsE_ZN4node7UDPWrap5Send6ERKN2v89ArgumentsE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN4node7UDPWrap9RecvStartERKN2v89ArgumentsE_ZN4node7UDPWrap8RecvStopERKN2v89ArgumentsE_ZN4node7UDPWrap11GetSockNameERKN2v89ArgumentsE_ZN4node7UDPWrap13AddMembershipERKN2v89ArgumentsE_ZN4node7UDPWrap14DropMembershipERKN2v89ArgumentsE_ZN4node7UDPWrap15SetMulticastTTLERKN2v89ArgumentsE_ZN4node7UDPWrap20SetMulticastLoopbackERKN2v89ArgumentsE_ZN4node7UDPWrap12SetBroadcastERKN2v89ArgumentsE_ZN4node7UDPWrap6SetTTLERKN2v89ArgumentsE_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node7UDPWrap6OnSendEP13uv_udp_send_si_ZN2v86Object14GetHiddenValueENS_6HandleINS_6StringEEE_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE__assert2_ZN2v86Object31SlowGetPointerFromInternalFieldEiuv_udp_recv_stop_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectEstderrfprintfabortuv_udp_getsockname_ZN2v84NullEvuv_udp_recv_start_ZN2v84TrueEv_ZN2v85FalseEv_ZNK2v85Value12IntegerValueEvuv_udp_set_multicast_loop_ZN2v89UndefinedEvuv_udp_set_broadcastuv_udp_set_multicast_ttluv_udp_set_ttl_ZN4node7UDPWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_suv_udp_init_ZN4node7UDPWrapC1EN2v86HandleINS1_6ObjectEEE_ZN4node7UDPWrap6DoBindERN6jxcore10PArgumentsEi_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZNK2v85Value11Uint32ValueEv_ZN4node7commons14GetTCPBoundaryEv_ZN6jxcore8JXStringdeEvuv_ip6_addruv_udp_bind6_ZN6jxcore8JXStringD1Evuv_ip4_addruv_udp_bind_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN4node7UDPWrap13SetMembershipERN6jxcore10PArgumentsE13uv_membershipuv_udp_set_membership_ZN4node7UDPWrap6DoSendERN6jxcore10PArgumentsEi_ZN2v86Object3NewEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN2v86Object14SetHiddenValueENS_6HandleINS_6StringEEENS1_INS_5ValueEEEuv_udp_send6uv_udp_send_ZN4node7UDPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7UDPWrap11InstantiateEv_ZNK2v88Function11NewInstanceEv_ZN4node7UDPWrap8UVHandleEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10HandleWrap9SetHandleEP11uv_handle_snode_udp_wrap_modulek lm'n/ok lq&rk ls$ok l2vEwXxtyk l({`v|v}~/=ao )yk l${,4=Yp Nj  O4IO P*3 QMb R ) SCXy T U9Nou V  W/Dek X  Y%:[a} Z [0QWs| \ ]&GMir ^ _  = L ` x     yk l0{cv~vvv "To}~y/ `9 GC aK k l{BQdv b c k l{$,^xy k l"{L}~v/<z b c k l{DRzeun}v}}~(v4r b| c k l{Iu}~2R b\ cfpu k l{Iu}~2R b\ cfpu k l{Iu}~2R b\ cfpu k l{Iu}~2R b\ cfpuk l,2qL k l{4FR^k k l%{L8~/Gb{}~ d#5GQyj bt c~ k l{BM k l{BM k l"{Iy=HRo}~by b c  k l{BM k l{BM k l%{O{5Iiv{v e4vXvx?S @}U~}ov/G_wy b c ` G a k l{BM k l{BMk l0 k l{'/KvZlvyk l J( 2:Cs t  Lp  <l0`!#%')L+|-/1 3<5l79;=4?dAxCK4 p@pqHpkP!P'P,PhPCd @d(p1 @d p 0 @d pY}U @d0p5 @ep2 k g @epO @ip2m%^d`` @\jhpBP @jPp";$~0z @kp% @kp('zsyo @Llp+y @lp.-ztyp @\mp1y @mp4z\\X @ln(p7| @n@p:\:`6 @np=p !^ @o(p@^! `!^ @p(pCD ! !+ @?ABDEGHJKMNPQSTVWYZ\]_`bcefhiUWVuSd$ĉ4$}4$$xtGEԉ$Uԃ1t $D$4$4$e[^_]t&$1ҍH*ʉUԉ$XD$Eԃ4$D$$|getCPUrunLoopexecSyncexecSystemprintprint_err_warnbeforeApplicationStartsetMaxHeaderLengthgetUnique_cmp_ucmpexpirationSourceNot enough memory!%s jxcore-log.portTCPportTCPSallowCustomSocketPortallowMonitoringAPImaxMemoryallowSysExecmaxCPUmaxCPUIntervalallowLocalNativeModulesglobalModulePathrleaf() == x->leaf()../src/jx/btree.hparent()->is_root()node != root()parent() == src->parent()src->count() >= count()to_move >= 1to_move <= src->count()parent() == dest->parent()count() >= dest->count()to_move <= count()child(i + 1)->count() == 0position >= node->count()position < node->count()dest->count() == 0count() >= 1i <= count()position <= -1position >= 0iter.node->leaf()iter.node == root()node_jxutils_wrapUWEVSd$ĉ$}E4$$uD$ D$D$4$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$Eԃ4$D$T$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$4$D$ D$D$Eԃ4$D$EԍT$4$D$EẼ<$D$ D$EԉD$EЉ$e[^_]f>UWVuSd$4$4$$NjE @uYGXDŽEԉ$Uԃ1t $D$4$U4$Ee[^_]t&E UԉUȋ@$WXMЃ<u1ɃL M̋MiE‰t&FXMЋt2<$FXD$ D$ẺD$$uuċEEԉ$Eԉ$EEԃ1&Eȉ$Uԃ1t $D$4$}Missing parameters (setMaxHeaderLength) expects (unsigned).Wrong parameters. JXUtilsWrap::GetCPU expects (long, int)Missing parameters (execSystem) expects (string).This process is restricted for calling system commandsMissing parameters (print) expects (string).Missing parameters (print_err) expects (string).compress methods expects string or buffer as argumentWarning! This method is for internal usage. Missing parameters (beforeApplicationStart) expects (object).maxCPUInterval can not be <= 0. The default value is active now (2 secs).execSync could not create the pipeMissing parameters (execSync) expects (string).position() + 1 == src->position()i + to_move <= src->max_count()position() + 1 == dest->position()node->parent()->child(node->position()) == nodechild(count() + i + 1) != NULLnode->count() == node->max_count()node->max_count() - node->count() == to_movenode->count() < node->max_count()*mutable_rightmost() == parent->child(0)!compare_keys(tmp_iter.key(), iter.key())Missing parameters (expirationSource) expects (string, int).../src/wrappers/jxutils_wrap.ccUWVuSd$ċU 4$U4$$UЀx z uz}ԉL$D$ <$D$Eԃ<$D$Eԃ<$D$EԃD$4$M4$Ee[^_]Eԉ$Uԃ1tË$뷐t&~vB}ԉ$M̉UM̄IUЋB~uB$<$Uԃ1t $D$4$}QU̍}ԉ<$MEԃMЋUn<$Eԃ{UWVuSd$4$} 4$$Ẻ‹zOEȍEuEЃuMEЉ$Uԃ1t $D$4$M4$Ee[^_]GƒWGEĉЃEĉD$EЉMĉ$EЃ}ԉ$|$Eԃ$Mĉƒ~UčD$UĄẺT$|$$1P1 &$MEԃM &EЉMĉ$EԃMċЃG~GE&EЉMĉ$EԃMt&}ЍD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ6t&Pzd@ VBxBB /EЉ$Uԃ1t $D$4$}UWVuSd$ĉ4$} 4$$xOGUЉ$UЄGMԉMЃ$UUȄGG$EȃUG$D$T$ EȋỦ$T$E\$$Eԃ)Eԉ$Uԃ1t$&4$D$M4$Ee[^_]fUȍEԉ$EEԃUEԉEЋ}ЍT$D$ D$<$Eԃ<$D$Eԃ<$D$7EЉ$EԃfEЉ$EԃUWVuSd$4$4$$M xI|}ĉT$D$ <$D$Eă<$D$Eă<$D$Eă4$D$M4$Ee[^_]fEĉ$Uă1t $D$4$}뵍t&~vE }ċ@=@@-UUt^$UUT$L$<$Eăut&U}ĉ<$EăUwt&T$<$D$ D$Eă<$D$Eă<$D$덍t&UẺ$EE U@~RE @D$ED$U$E$$EE$UM<$EăUUWVuSd$4$4$$M x:QEĉE|$}D$ D$<$Eă<$D$Eă<$D$Eă4$D$M4$Ee[^_]t&Eĉ$Uă1t$볐t&E UĉU@ƒA@@1}̉<$E @~yE @D$D$<$<$D$ D$$D$<$E>vEĉ$EEăY&E$EăwUWVuSd$4$4$$M x:QEĉE|$}D$ D$<$Eă<$D$Eă<$D$Eă4$D$M4$Ee[^_]t&Eĉ$Uă1t$볐t&E UĉU@ƒA@@1}̉<$E @E @D$D$<$E xE @$<$t^D$ D$$D$<$Et&Eĉ$EEă1&D$ D$$D$렐t&E$EăMfE$Eă UWVuSd$4$4$$NjE EE @tHEĉ$Uă1t $D$4$M4$Ee[^_]M IM|$ $t?<$EȉD$P1t $D$4$UfE}ĉ<$D$ D$T$Uă<$T$Uă<$T$Eă4$D$}t&EMĉ $EMąM'E HE @Eȉ|$$;E PE @@@Ẻ$EE @~oE @D$ED$$EMЉ$MMD$<$L$EE$EhEĉ$Eă fEĉ$Eă널t&Eĉ$Eă+f@@vEĉ$Uă1UWEVSd$$} E4$$x WMuD$ D$E4$D$E4$D$E4$D$ED$E$ME$Ee[^_]E$U1t$밐t&GuƒdGGD$4$EM̉L$EMMȉD$ $MMD$ 4$D$L$}E|$$YED$ D$E4$D$}E|$$LED$ D$E4$D$}E|$$D$ED$E$D$ D$E4$D$}E|$$$D$ D$E4$D$}E|$$s$T$D$ D$E4$D$}E|$$$D$ D$E4$D$}E|$$4ED$ D$E4$D$}E|$$wD$E$D$ D$E4$D$}E|$$$D$ D$E4$D$}E|$$E}D$<$<$E̍P;^EȍP;4$U1t $D$E$Ut&u4$E.f4$E7t&E|$4$D$}ƒ?<$n<$Ee&E|$4$D$U@@<}T$D$<$<$}$MD$|$ $E$vE|$4$D$}Ѓ/<$<$&E|$4$D$U$UUJ$?$D$D$t&E|$4$D$}ƒG<$<$E&E|$4$D$}Ѓ<$<$&E|$4$D$}ƒg<$T<$ IfE|$4$D$}ƒ<$<$&E|$4$D$Ug$UU $E|$4$D$}ƒ7<${<$Er&Pz@ "HE$D$t&H$EljD$nt&Pz@ A8&Hy@ VM&Hy@ p&Pz @ &Pz@ p&Jy R  &JyR &Pz@ $&Pz@ 90&Hyx"fHyxUWVS$D$t$$0$|$D$4$tP !%tt$DJD$8$)T$띐t&<$$4$[^_]D$"D$$8$$4UWVuSd$4$4$$M x MM Q~}D$ D$E<$D$E<$D$E<$D$ED$4$}4$Ee[^_]E$U1t‹$붐t&~FE }@ƒK@@;u,D$ -}<$E밐t&EẺ$EE @mE @D$ED$$UÍT$UUȉD$$UE$U$T$UĉT$E<$D$D$EȃM<$D$ED$ MD$E<$D$EED$EMD$ D$E $D$E<$D$EĉD$E<$D$EED$E}D$ D$E<$D$|$4$}EȍP;u*E$f<$Et&tHE$D$뭋xOHUWVSd$D$d|$`8` D$dW@9N L@ r@@@D$d@9yrL@ @@@D$d@9>rL@ @@@D$d@9rL@ @@@D$d@9rL@ @@@D$d@9rL@ @@@D$d@9RrL@ @@@D$d@9L@ J@@@D$d@9M r L@ @@@D$d@9r L@ @@@D$d@9}g L@ @@@D$d@9}0L@ @@@D$d@W9N t$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9Lt$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9t$dLB pBBBW9`t$dLB BBBP O9ML$du tB BBBP O9L$d tB BBBW9t@ @@@WA9LЉT$,D$dO|$`pDD$(&l$l$$l$X $L$L$l$$A qyD$EQAET$T$AEAEAD$u}UE;L$(uD$d|$`@o9}xt$dT|$`tL$ f9}FJ;L$t닻BD$d@9|É'|$`o9~lD$vG9}ZEP;T$t拋HȅȍD$?l$$l$X$D$l$$G9|?l$,UD$d9L$d9t$dMooootEoot o(o(((9t| T$dP9T$,|M T$d9D$,|"D$dD$dt$dppGpGpGpG pG~upG~cpG~QpG~?pG ~- pG ~$pG ~ (pxD$d@1xD$dPxD$dPxD$dPxD$dP xD$dPxD$dPxD$dP~qxD$dP~YxD$dP ~A xD$dP ~)$xD$dP ~(xD$d@WGD$dPd$L[^_]Ðt&D$d@wvHL$$HD$$fBxzTl$$D$?D$l$X $D$dl$$@t$dt$,T$dT$dL$d    _>     $ $$$((((|t&D$d@Ml$XD$ D$D$$UWVSd$ċD$Pxt d$<[^_]À8L$9A@8L$AD$P(}}1L$t&E9}jP;T$t狋1Hȅɉl$D$/D$l$H$l$뫍v$l$HD$Pd$<[^_]ÐD$P(,$l$HD$PL$d$<[^_]Ívt$l$HD$4$~tvD$1xʼnL$&E9}JP;T$t狋tuHȅ͉l$D$/D$l$H$l$믍&D$Pl$HL$;tqD$$N&HL$HD$fHL$HD$넍l$HD$ D$D$G$D$;D$ D$$UWVSd$|$dD$`t$hW9PD$`W@9tD$`W@9291ҋl$`I EЃL@ 9@@@uˋD$`@D$`@LD$`T$`L$,@L$l,$l$l$Xl$L$,UET$UD$E T$$QD$ D$UQUQ U QUT$AD$ QT$$A DQLD$`L$,@D$`@L$l,$l$l$Xl$L$,UET$UD$E T$$QD$ D$UQUQ U QUT$AD$ QT$$A QOt$hΉ|$d D$`l$X|$`L$ @t$ȍ|<$nGWonD$G onL$ T$o nWo|$l$FV~n;L$hu|$dt$hG9ot$L|$dt$hL$,$l$ l$XL$,l$ D$L$,E u}D$ AUEAT$$T$$EAEAED$ QqAD$dyT$@9||$dt$ht$hf9L$h|gG)ȍDP;tߋqhÍD$?l$X$D$L$L$9L$h}&'D$`t$h8T$`l$`RJhHUJhHhUJhHEUJhH"UJ hHU JhHUJhHUJhHU J hHtwU J hHtXU J $hHt9U $J (hHtU(J ,hHG9xHG9|g1 fo 9|SAyDŽO)9}ɋT$`B(Gd$L[^_]Ít&hupl$XD$ D$D$#$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$l$XD$ D$D$$UWVSd$|$dD$`9xD$`|$d@W9D$`PD$d@9l$h9T$h1ҋt$dO |$hvFЃL@ 9@@@uˋD$d@x|$|$dD$hlLl$ AD$E$l$XL$,l$ l$L$,Eu}D$ AU EAT$$T$$EAEA E D$ qyAD$Q uD$`l$X|$d@D$`@tD$ht$D|<$NGWOND$G ON T$l$O NWO|$F D$`nl$XV~@|$`+D$htGGt$|<$NGWOND$G ON T$l$O NWO|$F D$`Vn~@|$`+D$hDP;-D$d|$hD$HfD$D$;D$hD$`t$`L$,@L$+D$hD$l,$l$ l$Xl$ L$,E u}D$ AUEAT$$T$$EA E AED$ yQA D$`q|$`@+D$hD$DP;E7p%D$?l$X$D$L$ L$ t&D$`8D$dL$h|$dpxHFǂ* D$hBFzǁ D$hBFzǁ D$hBFzǁ D$hBFzǁj D$hBFzǁ: D$hBFzǁ  D$hBFzǁ D$hBFzǁ D$hBFzǁt~ D$hBFzǁtR D$h zBǁt&t$h񉄏xHǂD$ht$`xV|$|$d&+T$hHTt"yF9tQd$[^_]Í&AV98uv8tAd$[^_]ÍvF8u1V9u>'Q@h9uh}t1yd$[^_]ÐP;tˍl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$$$~$P$Pҋ$$@)ЈF'$~o$D$HD$$#t&$D$|$@9D$$$AA@ A AGL$L$0D$l,$l$(l$xl$(L$0Uu}T$,QE UQD$(D$(UQ U QUT$,qyQ$A BD$DP;T$$#pD$Ll$x$D$L$(L$(f$@$l$xD$PFD$$D$TD$XD$\@ D$LFD$4Ƌ$@D$8@9<|$8t$Lt$<t$4F$D$PF D$TFD$XFD$\FGD$9D$4gLil$l$ $l$0l$xL$(L$(iqA iiyQiiAD$i iq9D$4yil$0QuD$8xD$8WP8l$49t$8W9 Hi4G9ʼnQLt$8W9Ս4A+t$8G94Q t$8W94At$8G94Qt$8W94At$8G9ō4Qt$8W9Ս4A}it$8G9ō4Q}Lt$8W9Ս4A}/G|$89ō4Q} BD$8DŽD$Ll$xP;T$$$$@$@t$@t$|<$NGWOND$G ON T$l$O NWO|$F $Vn~@$DP;T$$$$P@JF$N8ug@$?$1$vT=TBJV|=Dy9~ȍd$l[^_]Í&$V9t1$P$Pt&xwp%$1@t{HD$<$D$t?p$D$KD$|$|$$pNHHqpD$}D$ D$$l$xD$ D$D$]$D$D$ D$$l$xD$ D$D$k$UWVSd$t$dAD$:AD$`y;iPD$$@T$D$ 9+D$9V҃T$(|$(N9F~D$l$XD$D$$L$$D$Qy)9~)Dž~ A8AD$-D$ D$$T$;T$ r&GD$9D$:G:9l$Xua$,@@ @xVD$D$T$$D$VI9~ )ʃVd$L[^_]Í$@@ @xVD$D$T$$D$`D$:9u,uPD$(@T$ D$$9)1҃~ƒT$,|$,OD$)9F~D$ ;D$$D$(l$XT$ $D$FQ9~)ЃFD$(PA9D$GD$ D$$t&,9v9l$X$4NjD$`@GG ,GG@0D$`@xD$`89,l$]&1 |$$W>DFl$XD$ D$D$$D$[D$ D$$D$&D$ D$$UWVSd$L$01>tryF8uAV9tvP;Q@uh}t։1y'd$[^_]Í&A8u)P8t@Ad$[^_]Íl$(D$ D$D$$l$(D$ D$D$$l$(D$ D$D$$UWVSd$D$hD$$8D$d8 D$/0D$hhD$$8t$$UxF9|$$MƋPG9UƋHG9dMƋPG9AUƋHG9MƋPG9UƋHG9MƋPG9U ƋHG9M ƋPG9}sU ƋHG9}TM ƋPG9}5U ƋHG9} PGT$$DŽD$hD$/hD$$@t$$F9=t$$DL ml$ AL$l$X$L$(L$L$iq܋yi܋iAQiiAD$$iiqyiQl$ @9|D$(P;sD$hl$XT$h|$dRD$8;T$<HPt$d|$hfB9@"|$4$:t OT$8L$::insert_value(int, const value_type&) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree_node::value_type = std::pair, ttlTimer>]void btree::btree_node::split(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree::rebalance_or_split(btree::btree::iterator*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::iterator = btree::btree_iterator, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >, std::pair, ttlTimer>&, std::pair, ttlTimer>*>; typename Params::pointer = std::pair, ttlTimer>*; typename Params::reference = std::pair, ttlTimer>&]btree::btree::iterator btree::btree::internal_insert(btree::btree::iterator, const value_type&) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::iterator = btree::btree_iterator, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >, std::pair, ttlTimer>&, std::pair, ttlTimer>*>; typename Params::pointer = std::pair, ttlTimer>*; typename Params::reference = std::pair, ttlTimer>&; btree::btree::value_type = std::pair, ttlTimer>]void btree::btree_iterator::increment_slow() [with Node = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >; Reference = std::pair, ttlTimer>&; Pointer = std::pair, ttlTimer>*]void btree::btree_node::rebalance_left_to_right(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::rebalance_right_to_left(btree::btree_node*, int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::merge(btree::btree_node*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree::delete_internal_node(btree::btree::node_type*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::node_type = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >]void btree::btree_node::swap(btree::btree_node*) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::make_root() [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_node::remove_value(int) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>]void btree::btree_iterator::decrement_slow() [with Node = btree::btree_node, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >; Reference = std::pair, ttlTimer>&; Pointer = std::pair, ttlTimer>*]btree::btree::iterator btree::btree::erase(btree::btree::iterator) [with Params = btree::btree_map_params, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256>; btree::btree::iterator = btree::btree_iterator, ttlTimer, std::less >, std::allocator, ttlTimer> >, 256> >, std::pair, ttlTimer>&, std::pair, ttlTimer>*>; typename Params::pointer = std::pair, ttlTimer>*; typename Params::reference = std::pair, ttlTimer>&] TA$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,AB BDm AAA G 0LAB EC AAA C ,AB BD AAA G ,AB BD AAA C ,AB BD AAA D 0AB BD7 AAA E ,D[AB BD AAA E ,tAB BD AAA G ,6AB BD AAA G ,AB BD AAA D , AB EC AAA D ,4AB C AAA A ,d.AB BD AAA D < AA AAO`+ AA AAF h[AA AAOPP AA AAA  AA AAB ` AA AAD <@AA AAO` AA AAE <AA AAO` AA AAB <AC AAO` AA AAF <AC AAOP AA AAD l@AA AAO@ AA AAA V CA AAD e AF AAB h_AA AAO0a AA AAH x AA AAD B AA AAB @AA AAO AA AAH <`AA AAO` AA AAG ToAA AAO0q AA AAH P AA AAA <HAA AAO` AA AAC T8+AA AAOP AA AAH  FA AAC <AB C AAA G  FAA H T AA AAOp  AA AAE  AA AAG ,(AB AE AAA C $XFAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node11JXUtilsWrap13GetUniqueNextERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap13GetUniqueNextERKN2v89ArgumentsE.rodata.str1.1.text.unlikely._ZN4node11JXUtilsWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node11JXUtilsWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node11JXUtilsWrap7RunLoopERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap7RunLoopERKN2v89ArgumentsE.rodata.str1.4.text.unlikely._ZN4node11JXUtilsWrap18SetMaxHeaderLengthERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap18SetMaxHeaderLengthERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap10UncompressERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap10UncompressERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap6GetCPUERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap6GetCPUERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap10ExecSystemERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap10ExecSystemERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap8PrintLogERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap8PrintLogERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap10PrintErrorERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap10PrintErrorERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap8CompressERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap8CompressERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap22BeforeApplicationStartERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap22BeforeApplicationStartERKN2v89ArgumentsE.text.unlikely._ZN4node11JXUtilsWrap4execEPKcPiRSs.rel.text._ZN4node11JXUtilsWrap4execEPKcPiRSs.text.unlikely._ZN4node11JXUtilsWrap8ExecSyncERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap8ExecSyncERKN2v89ArgumentsE.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv.rel.text._ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE.text.unlikely._ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT_.rel.text._ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T_.text.unlikely._ZN4node11JXUtilsWrap19SetSourceExpirationERKN2v89ArgumentsE.rel.text._ZN4node11JXUtilsWrap19SetSourceExpirationERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_jxutils_wrap.cc.rel.text.startup._GLOBAL__sub_I_jxutils_wrap.cc.rel.init_array.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12insert_valueEiRKS7_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EERKS7_E19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_E19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeIS9_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION__.rodata._ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEvE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION__.rel.data.rel.node_jxutils_wrap_module.bss._ZN4nodeL5loopsE.bss._ZN4nodeL9unique_idE.bss._ZStL8__ioinit.rodata.cst8.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group& !#$&')*,-/0235689;<>?7|AB}9{DEyGHkxJKz~MNPQSTwVWt/[sYZ u\]s_`bcefhivklno}Foqstuvwxyz{|}~#)8Oblqw< x     & H, 2 8 > D J P V \ b h n +t z < 8 \ > ? S e y           &  A [ $ t    D" ( h. 4 : @ F L      R       - e      "$ 'S    < l .< [* -606 6v!3$lTq1`y %n ^vL;\{ J|97 "?["B '"E"H#"K"N "Q_"TB"W"ZOUo"]H"`w~+"c-"f "iH\u jxutils_wrap.cc_ZN4nodeL9unique_idE_ZN4nodeL5loopsE_ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA_E19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE9make_rootEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE20delete_internal_nodeEPNS_10btree_nodeIS9_EEE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA_E19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12remove_valueEiE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEvE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12insert_valueEiRKS7_E19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION___ZZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEvE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EERKS7_E19__PRETTY_FUNCTION___GLOBAL__sub_I_jxutils_wrap.cc_ZStL8__ioinit.LC0.LC2.LC3.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC16.LC18.LC20.LC22.LC23.LC25.LC26.LC27.LC29.LC31.LC33.LC34.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC44.LC45.LC43.LC47.LC48.LC50.LC51.LC53.LC54.LC56.LC57.LC64.LC63.LC62.LC61.LC60.LC59.LC68.LC67.LC69.LC66.LC71.LC76.LC75.LC77.LC82.LC79.LC81.LC80.LC86.LC84.LC87.LC85.LC89.LC90.LC92.LC93.LC97.LC99_ZN4node11JXUtilsWrap13GetUniqueNextERKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_Z10customLocki_ZN2v86Number3NewEd_Z12customUnlocki_ZN4node11JXUtilsWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node11JXUtilsWrap6GetCPUERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node11JXUtilsWrap7RunLoopERKN2v89ArgumentsE_ZN4node11JXUtilsWrap8ExecSyncERKN2v89ArgumentsE_ZN4node11JXUtilsWrap10ExecSystemERKN2v89ArgumentsE_ZN4node11JXUtilsWrap8PrintLogERKN2v89ArgumentsE_ZN4node11JXUtilsWrap10PrintErrorERKN2v89ArgumentsE_ZN4node11JXUtilsWrap22BeforeApplicationStartERKN2v89ArgumentsE_ZN4node11JXUtilsWrap18SetMaxHeaderLengthERKN2v89ArgumentsE_ZN4node11JXUtilsWrap8CompressERKN2v89ArgumentsE_ZN4node11JXUtilsWrap10UncompressERKN2v89ArgumentsE_ZN4node11JXUtilsWrap19SetSourceExpirationERKN2v89ArgumentsE_ZN2v87Isolate10GetCurrentEv_ZN2v84TrueEv_ZNK2v85Value12IntegerValueEvusleep_ZN4node7commons11CleanPingerEiuv_run_jx_ZN2v85FalseEv_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZNK2v85Value8IsUint32Ev_ZN4node7commons15max_header_sizeE_ZN6jxcore11RemoveCacheEv_ZNK2v85Value8ToObjectEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN6jxcore10RaiseCacheEm_ZN6jxcore16UncompressStringEPN4node7commonsEN2v86HandleINS3_6ObjectEEEm_ZNK2v85Value8IsNumberEv_ZNK2v85Value7IsInt32Ev_ZN4node7commons11GetCPUUsageExx_ZN4node7commons10CanSysExecEvsystem_ZN2v87Integer3NewEiPNS_7IsolateE_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEv_ZN6jxcore8JXStringD1Ev__android_log_print_ZNK2v85Value12BooleanValueEv_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN6jxcore14CompressStringEPN4node7commonsEPN2v86HandleINS3_5ValueEEE_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN6jxcore14CompressStringEPN4node7commonsEPKcl_ZNSsC1EPKcRKSaIcE_ZN2v86Object3HasENS_6HandleINS_6StringEEE_ZN4node7commons17SetPortBoundariesEiib_ZN4node7commons16SetMonitoringAPIEb_ZN4node7commons12SetMaxMemoryEx_ZN4node7commons10SetSysExecEi_ZN4node7commons9SetMaxCPUEii_ZN4node7commons26SetAllowLocalNativeModulesEi_ZNSsC1ERKSs_ZN4node7commons19SetGlobalModulePathESs_ZNSs4_Rep20_S_empty_rep_storageE_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPvstrlen_ZNSs6assignEPKcj_ZNK2v85Value9IsBooleanEv_ZNSs4_Rep10_M_destroyERKSaIcE_ZN4node11JXUtilsWrap4execEPKcPiRSspopenfgets_ZNSs6appendEPKcjpclose_ZN2v85Array3NewEPNS_7IsolateEi_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE4swapEPSA__ZNSs4swapERSs__assert2_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE10try_shrinkEv_ZdlPv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_right_to_leftEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE23rebalance_left_to_rightEPSA_i_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5mergeEPSA__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE11merge_nodesEPNS_10btree_nodeIS9_EESD__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE22try_merge_or_rebalanceEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14increment_slowEv_ZN5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5splitEPSA_i_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EE_Znwj_ZN5btree14btree_iteratorINS_10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS3_EELi256EEEEERS8_PS8_E14decrement_slowEv_ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE5eraseENS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEmemcmp_ZNK5btree10btree_nodeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS4_EEEEiRS6_iiRKT__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE12erase_uniqueERS6__ZN5btree5btreeINS_16btree_map_paramsISs8ttlTimerSt4lessISsESaISt4pairIKSsS2_EELi256EEEE13insert_uniqueIPKS7_EES5_INS_14btree_iteratorINS_10btree_nodeIS9_EERS7_PS7_EEbERS6_T__ZN6XSpace6TimersEv_ZN6XSpace10LOCKTIMERSEvuv_hrtime_ZN6XSpace9SetHasKeyEb_ZN6XSpace12UNLOCKTIMERSEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_jxutils_wrap_modulepthread_create  '/@Vbl f f l  $,4Bas| m n/5Qcl o p%AS\ qv r1CL sf t!3< uVw} v#, wFgm x  $,M e\r~ e&?_r  "*2X yl~ *@Lm  '/T_u-Kw z"4  '/W(5Us {  $,V |j|'=]z }%3L  $,Y ~p)MU_ i y  $,Y p)Qo{    '  $,Oeq~ *<Nj"3FTg  $,4b u*@ U^ v  8F Yn   " 0 CXu     %:T \ hz-O /Pcx  %Geu7Ue99  1P   $,` s. }?a  -Qg9 <9 49g  _  l90Bs9  ` -; E ^O W hx(ks9  \ (. < \F V\ j \t   \   \   \  r!Ye99  [ $* 8 [B RX f [p   [   [  F,9x9 / 9 ]C KQ _ ai y  ]  )"c9C9s  ^   !## Z   Z -3 A ZK [ 9K 99 & W0 8> L WV ft ~ V   W     X  _(&(&!  X %('( ( X2 BP Z Xd lz  X  b  # b- =C Q b[ k V$%/)+T%s9  c   c  * a4 D +$++, +n+*%++)+++b, + +D++)(]e9+n++: 's  (@ + , Y  V   "*2Pfr/ Oh0/-16 E  .*2/3Kb|9&29dr99  g4( 526:7R  P  Hx8 h"$'D+.15D79 <d@CF<IKM,P\Ri"4 "@ "L "X "d !"p ""| #" $" %" &" '" )" *" ," -" ."!',vr @2 @xU   @2 t4,@( @,!n @$1- @'f[ @L*+' @,-b6 @0'# @3^   @(6+.+ * @ H9X,,. @ </O0 K @, x?=8=[4 @ B@6  @ 2 @D E 2GK @G G @TH  OL  O H @\K WO WK @$pN Y Y @0Q:[[_  @pTq]]  @4W`dd @$Zji_io [ @$p]jjH @`38q@q+  @\0cls)ps% @Xfw]x Y @ib^ @l F @T8oX @q[@@1@ @@@@b@@@@%@@R@@j @!@@!X! @!@"!"5"B"^"0(g"{"w" @D" p#process_wrap.o/ 1560953075 501 20 100644 18104 ` ELF>4(41 ',UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE Uԋ@$D$}ԃ$X$D$|$EEЍR|$4$MUSd$싓D$ R$d$[]UVSd$t$ @4$4$d$[^]onexitProcesscloserefunrefspawnkillignorepipewrapttytcpudpBad argumentnode_process_wrapUWEVSd$$E<$$#EEuċM xEL$4$D$EăEЋE$D$ED$ 4$D$Eă} Et}Gt $EE4$D$ T$D$UЋET$UD$D$T$ G4$D$E$e[^_]ÍvWE$T$EUD$T$G$J&EUWEVǍuSd$$E<$$D$ D$4$T$E}ԃ4$|$UԃD$$D$4$D$EUԃ<$T$EȅE$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$|$4$Ẽ4$D$D$}Eԃ|$D$ D$E$EЉ$e[^_]Ív../src/wrappers/process_wrap.ccProcessWrap: Aborting due to unwrap failure at %s:%d This process is restricted for calling system commandsoptions.uid should be a numberoptions.gid should be a numberUWVuSd$} 4$UċPJyD$ $AEGG}ԉ$MMD$ $t:EUȋE$L$EȃỦD$ET$$EUĉD$<$T$Eԃ4$D$}4$Ee[^_]J ;Axu+I*vM}ԉ<$EԃM*t&D$ D$D$$UWVSd$EEĉEƋE4$D$Eă4$D$E D$Eă$EǺEG‰$UBЉxhEEЉEEEEE2vEU@E$EEE9EE}D$E<$D$EăEƋE<$D$Eăt$<$D$uED$4$D$4$}KE$ƉumEU}@1EpE֋ <$D$Eă<$D$ED$Eă$$FEU$ƹE}D$<$Eă<$D$ED$}ED$<$D$<$UƉE} <$D$Eă<$D$ED$Eă$$UMR URD E$fe[^_]ËuD$4$Eă4$D$ED$Eă$UMR URD mt&E$ƹtlE$ƹEu 4$D$Eă4$D$ED$Eă$$E} <$D$Eă<$D$ED$Eă$$E$ƹ18nE} <$D$Eă<$D$ED$Eă$$"dUWEVS$Du $thPJycD$ $dd N@ɉphFuD$}4$E p\l1󫋃E4$D$E4$D$lD$}<$ ƒD$ D$h4$D$E4$D$E4$D$ED$t$Mt$Ee[^_]B tQPz<@duD$ Jfu4$EfdSt&<$EMp4$D$E4$D$lD$}<$u{ƒD$ D$h4$D$E4$D$E4$D$ED$t$U<$EMp4$D$E4$D$lD$}E`$ƒtzD$ D$h4$D$E4$D$E4$D$ED$t$M`$f@@v`D$|$$UQ`$Eċp4$D$E4$D$lD$ETT$T$PljPC‰$Eȅ1ҍ}LTt$D$L$ED$<$D$Eȉ<$E XX<$9PuLEȋPp4$D$E4$D$lD$}EH$ƒp4$D$E4$D$lD$ETt$ \lD$p|$$p 4$D$E|$4$D$E$tMp4$D$E4$D$lD$E$tMd\xT$|$@$ldxW$T$x|D$T$G$MȅtCt5$Mȋ9ut $M̅t9t+'$M̋9ut $E܅t$h4$D$lD$ED$t$MH$t&Pz@ &Pz(@  &d|$׉$PW1t $NjhD$dPD4$T$pU4$dL$dD$ <$T$UT$"vT$PljPC‰$E̅1ҍ}LTt$D$L$ED$<$D$Ẻ<$E XX<$9PuLE̋P t&D$ ^D$D$$&@@jHD$|$$EEH$E/UVSd$4$t$D$$d$[^] T$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,AB BDn AAA F L1AB AkA $p;AB BsAA 0mAB EC AAA D 0AB EF AAA D ,yAB BD AAA C ,0AB C AAA A ,` AB F AAA I $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node11ProcessWrap3NewERKN2v89ArgumentsE.rel.text._ZN4node11ProcessWrap3NewERKN2v89ArgumentsE.text.unlikely._ZN4node11ProcessWrapD2Ev.rel.text._ZN4node11ProcessWrapD2Ev.text.unlikely._ZN4node11ProcessWrapD0Ev.rel.text._ZN4node11ProcessWrapD0Ev.rodata.str1.1.text.unlikely._ZN4node11ProcessWrap6OnExitEP12uv_process_sii.rel.text._ZN4node11ProcessWrap6OnExitEP12uv_process_sii.text.unlikely._ZN4node11ProcessWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node11ProcessWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rodata.str1.4.text.unlikely._ZN4node11ProcessWrap4KillERKN2v89ArgumentsE.rel.text._ZN4node11ProcessWrap4KillERKN2v89ArgumentsE.text.unlikely._ZN4node11ProcessWrap17ParseStdioOptionsEPNS_7commonsEN2v85LocalINS3_6ObjectEEEP20uv_process_options_s.rel.text._ZN4node11ProcessWrap17ParseStdioOptionsEPNS_7commonsEN2v85LocalINS3_6ObjectEEEP20uv_process_options_s.text.unlikely._ZN4node11ProcessWrap5SpawnERKN2v89ArgumentsE.rel.text._ZN4node11ProcessWrap5SpawnERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_process_wrap.cc.rel.text.startup._GLOBAL__sub_I_process_wrap.cc.rel.init_array.rel.data.rel.ro._ZTVN4node11ProcessWrapE.rel.data.rel.node_process_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    "#F#0+%')+,./?DINSX]%ci o*u1{6;?CXG- ,5X28x!'1" 1" ;"m.Pi.K"Eb 9  y@h   E ]     - I {     - I a         # 0 ^ )process_wrap.cc_GLOBAL__sub_I_process_wrap.cc_ZStL8__ioinit.LC3.LC5.LC6.LC7.LC8.LC9.LC10.LC12.LC13.LC15.LC16.LC17.LC18.LC19.LC20.LC23.LC22.LC24.LC25_ZN4node11ProcessWrapD5Ev_ZN4node11ProcessWrap3NewERKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_ZNK2v85Value8ToObjectEv_Znwj_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_s_ZTVN4node11ProcessWrapE_ZN4node11ProcessWrapD2Ev_ZN4node10HandleWrapD2Ev_ZN4node11ProcessWrapD1Ev_ZN4node11ProcessWrapD0Ev_ZdlPv_ZN4node11ProcessWrap6OnExitEP12uv_process_sii_ZN2v87Integer3NewEiPNS_7IsolateE_ZN4node12signo_stringEi_ZN2v86String3NewEPNS_7IsolateEPKci_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEEuv_last_error_ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s_ZN2v87Isolate10GetCurrentEv_ZN4node11ProcessWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN4node11ProcessWrap5SpawnERKN2v89ArgumentsE_ZN4node11ProcessWrap4KillERKN2v89ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZNK2v85Value12IntegerValueEvuv_process_killstderrfprintfabort_ZN4node11ProcessWrap17ParseStdioOptionsEPNS_7commonsEN2v85LocalINS3_6ObjectEEEP20uv_process_options_s_ZNK2v85Value8ToStringEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZNK2v85Array6LengthEv_Znaj_ZN6jxcore8JXStringD1Ev_ZN2v86Object3GetEj_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEv_ZN4node8PipeWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node8PipeWrap8UVHandleEv_ZN4node7TCPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7TCPWrap8UVHandleEv_ZN4node7TTYWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7TTYWrap8UVHandleEv_ZN4node7UDPWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node7UDPWrap8UVHandleEv_ZN4node7commons10CanSysExecEv_ZNK2v85Value7IsInt32Ev_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZNK2v85Value10Int32ValueEv_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZNK2v85Value7IsArrayEv_ZNK2v85Value6IsTrueEvuv_spawn_jxfree_ZdaPv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10HandleWrap9SetHandleEP11uv_handle_snode_process_wrap_module < =>$?,@=ASB_ClDEFGHC< =H&J< =H'J/M < =!>)?1@aOuPQB "QRD4SPTaU< =$>,?4@:;YWkXY #Z[\]W $ Z ^D_J`fWu %Z^_aW &Z^@_FbbWq 'Z^_cW (Z^<_HdeZeDU < =>IfughSTOCD2AR )\ *fipjuk< =9mRncop +qr$m:nWs_t|t ,mnuv -t7mPnmsutmnuvqm2n@gm .ut /tmnwxmn+y3zA 0Itzmn{|U < =(>7}dfENmn~- 1RQdvCD 2A$Cm_nm~ 3QCm/nF` 4vQCqt*mFnh~oprs-t=qsmnmn,lDmZnhmnS3Td}OCqBOm e" oJ p r s t q ) *& i0 j5 kf  t< = ( 2:K L V Pt  4dE425EH 2VET2HE\2<d!d'd,dkpg @06p2 R`1 @6 2 ; @6(272fFBPm @62   @h72P2l_<@y @82 L H @p92|  @;2 . `F\ @=82#X @>2%` @>2't @0>2)0(';7 @H>P2/|L 3; )w signal_wrap.o/ 1560953075 501 20 100644 11504 ` ELF$4(30&+USd$싓D$ R$d$[]UVSd$t$ 4$4$d$[^]onsignalSignalcloserefunrefstartstopnode_signal_wrapUWVSd$ExE؉$EU uĉD$4$T$EUăEUԋP4$T$EUč4$D$D$ L$UEԋUD$Eĉ|$4$T$D$D$ E$e[^_]ÐUUWEVǍuSd$$E<$$D$ D$4$T$E}ԃ4$|$UԃD$$D$4$D$EUԃ<$T$EȅE$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$4$D$ D$D$Uԃ4$D$D$UEԃ|$4$EEȃUD$ D$EԉT$$|$4$Ẽ4$D$D$}Eԃ|$D$ D$E$EЉ$e[^_]Ív../src/wrappers/signal_wrap.ccSignalWrap: Aborting due to unwrap failure at %s:%d UW}VSd$<$E PMċJyD$ $ƅE @E MԉM@$D$D$F$t:NUȉE$L$EȃỦD$T$V$EUĉD$ET$$Eԃ<$D$u<$Ee[^_]r (Fxu(vEԉ$EEԃ &D$ D$D$$UWVuSd$4$E PMȋJyD$ $DžG$t:OUЉEċ$L$EЃUԉD$T$W$Eċ}ȍỦD$$|$Ẽ4$D$M4$Ee[^_]R tBxuzN&@D$ *D$D$$UWVSd$t$0D$44$~D$|$@|$F$d$[^_]UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE Uԋ@$D$}ԃ$`$|$|$4$MUVSd$4$t$D$$d$[^] +$GCC: (GNU) 4.9.x 20150123 (prerelease)zR|  1AB AkA $@0AB BhAA ,hAB C AAA B 0AB EF AAA D 0AB AE AAA I ,AAB BD AAA I (0YAB COAAA ,\AB BDn AAA F $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10SignalWrapD2Ev.rel.text._ZN4node10SignalWrapD2Ev.text.unlikely._ZN4node10SignalWrapD0Ev.rel.text._ZN4node10SignalWrapD0Ev.rodata.str1.1.text.unlikely._ZN4node10SignalWrap8OnSignalEP11uv_signal_si.rel.text._ZN4node10SignalWrap8OnSignalEP11uv_signal_si.text.unlikely._ZN4node10SignalWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node10SignalWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rodata.str1.4.text.unlikely._ZN4node10SignalWrap5StartERKN2v89ArgumentsE.rel.text._ZN4node10SignalWrap5StartERKN2v89ArgumentsE.text.unlikely._ZN4node10SignalWrap4StopERKN2v89ArgumentsE.rel.text._ZN4node10SignalWrap4StopERKN2v89ArgumentsE.text.unlikely._ZN4node10SignalWrapC2EN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node10SignalWrapC2EN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node10SignalWrap3NewERKN2v89ArgumentsE.rel.text._ZN4node10SignalWrap3NewERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_signal_wrap.cc.rel.text.startup._GLOBAL__sub_I_signal_wrap.cc.rel.init_array.rel.data.rel.ro._ZTVN4node10SignalWrapE.rel.data.rel.node_signal_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group   !"F".*$&(*+-.= B G L Q V [& `f ,l1+!&10 Ia&>["o)e?lA1b!'6YhY!'?Ldq(signal_wrap.cc_GLOBAL__sub_I_signal_wrap.cc_ZStL8__ioinit.LC2.LC4.LC5.LC6.LC7.LC8.LC9.LC11.LC12_ZN4node10SignalWrapD2Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZTVN4node10SignalWrapE_ZN4node10HandleWrapD2Ev_ZN4node10SignalWrapD1Ev_ZN4node10SignalWrapD0Ev_ZdlPv_ZN4node10SignalWrap8OnSignalEP11uv_signal_si_ZN2v811HandleScopeC1Ev_ZN2v87Integer3NewEiPNS_7IsolateE_ZNK2v85Value8ToObjectEv_ZN2v86String3NewEPNS_7IsolateEPKci_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN2v811HandleScopeD1Ev_ZN2v87Isolate10GetCurrentEv_ZN4node10SignalWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node10SignalWrap3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN4node10SignalWrap5StartERKN2v89ArgumentsE_ZN4node10SignalWrap4StopERKN2v89ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZNK2v85Value12IntegerValueEvuv_signal_startuv_last_error_ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v89UndefinedEvstderrfprintfabortuv_signal_stop_ZN4node10SignalWrapC2EN2v86HandleINS1_6ObjectEEE_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_suv_signal_init_ZN4node10SignalWrapC1EN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_Znwj_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10HandleWrap9SetHandleEP11uv_handle_snode_signal_wrap_module0 12&30 14$60 1%8L9g:v ";<=>0 1$8,@4A:BYCkDE #FGHIC $ F JDKJLfCu %FJKMC &FJ@KFNbCq 'FJKOC (FJ<KHPeFQ=> 0 18IRuS7TUV9W=BXb )l *vYZ[ 0 18IR^\}UV9W= )$ *.Y8Z=[0 1,^22L_ 0 18$@,A=XSa_Wl=:b`W0 1 c( d2e:f4 5g ? Dl  4`4 1?@12H10P!P'P,PXP1T @ 1w0 @ 1 2< @ P1F @ !12U&" @"1YA @0#x1Y  @#(1G: @  @#h1  F @8$81"X  @p$1$'` # @x$1&Pt L @$1(r  0 (   @$P1.x H2/ node_file.o/ 1560953079 501 20 100644 90572 ` ELF$P4(qniStatscloseopenreadfdatasyncfsyncrenameftruncatermdirmkdirreaddirstatlstatfstatlinksymlinkreadlinkunlinkwritechmodfchmodchownfchownutimesfutimesStatWatcherstartstopdevmodenlinkuidgidrdevblksizesequenceIdsizeinoblocksatimemtimectimereq_.data == this../src/jx/commons.hdomaindest path must be a stringsrc path must be a stringdirjunctionfileUnknown symlink typedest path requiredsrc path requiredpath must be a stringold path must be a stringnew path must be a stringNot an integerpath requireduid requiredgid requireduid must be an unsigned intgid must be an unsigned intfd requiredfd must be an intatime requiredmtime requiredatime must be a numbermtime must be a numberutimefutimeflags requiredmode requiredflags must be an intmode must be an intBad argument, expects integerOffset is out of boundsoff + len > buffer.lengthLength extends beyond bufferBad Argument, expects integer../src/wrappers/node_file.ccnode_fsUWEVSd$$}E4$$ED$ uD$D$4$UMăU1t $UMUML$4$EăD$ 4$EET$D$ED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EăD$4$T$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$D$ D$4$D$Eă4$D$EčT$D$4$EED$ <$D$EĉD$E؉$EE$$D$ D$4$T$EEă4$D$EUăD$$D$4$L$MEUĉ$T$Eq4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$E4$D$Eă4$D$EED$E<$D$ D$EĉD$E$E$e[^_]ÐEUEUWEVSd$u $Eb1t $D$uԉ4$Eԃ4$D$EԃEЅE|$4$D$EԃED$ |$4$T$ED$ D$EԉD$EЉ$M|$A4$D$EԃE]D$ |$4$T$ED$ D$EԉD$EЉ$M|$A4$D$EԃED$ |$4$T$ED$ D$EԉD$EЉ$M|$A4$D$EԃED$ |$4$T$ED$ D$EԉD$EЉ$M|$A4$D$EԃE"D$ |$4$T$ED$ D$EԉD$EЉ$M|$A 4$D$EԃED$ |$4$T$ED$ D$EԉD$EЉ$M|$A44$D$EԃEPD$ |$4$T$ED$ D$EԉD$EЉ$|$D$4$EԃD$ |$4$T$EED$ D$EԉD$EЉ$Mi,4$\$EԃED$ |$4$T$ED$ D$EԉD$EЉ$EP\hXq4$\$EԃED$ |$4$T$ED$ D$EԉD$EЉ$Eh8@<4$\$EԃED$ |$4$T$ED$ D$EԉD$EЉ$E*@@4$YD$Eԃ>D$ |$4$T$EED$ D$EԉD$EЉ$E*@H4$YD$EԃD$ |$4$T$EED$ D$EԉD$EЉ$E*@P4$YD$Eԃt`|$D$ 4$T$EE}D$ D$Eԉ<$D$Eĉ|$$Mt&EEĉ$Ee[^_]&t&؃t&؃UWEVSd$$}E4$$EME7EE2E8tBEĉ$EMă1t $EЃGvEH(EĉEfED$GD$E$EăEEԋD$E$UE}ċ$L$MЉL$MUEL$MĉT$|$$L$ F$FNFNH;vst$4$E$e[^_]ÐG$E G(5ƒ/‰2}UĉU|$D$D$L$ $EăEEEt&G D$ED$E$EăEEfG UEGT$UD$E$}ăE}1uuEUt$D$ D$$EăU|$EE$D$ED$ D$EĉD$E$4$;}tuuEEED$ G D$ED$E$EăEEfTUčUL$Lt&EvE=t&D$EĉE‹D$D$ G($D$D$D$ D$$Bad argument. Expects integer.Bad argument. Expects string, integer.Bad argument. Expects integer, integer.expects (fd integer, data buffer, offset integer, length integer, position integer)Second argument needs to be a bufferUWVS$$u <$$NjFF$FF$t~F$T~VB$ƍ$$1t $T$u$D$D$ D$$D$T$$D$ D$D$$1t$D$ T$$L$FH FNA $džD$$D$ VT$D$$D$$D$ D$ $D$v<[t&T$D$ D$4$4$D$4$D$D$$M$Ee[^_]&$1t$랍&D$ D$D$$xt$1t $D$$U$)v$t&$T$D$ D$D$<$D$<$D$A$/$XN,F4$L$F8$&1Hy@ aUWVS$$<$$E yE @D$D$ 4$D$4$D$D$$D$$M$Ee[^_]t&$1t $D$$uE @ƒ@@t,E xE @ƒD$D$ <$D$<$D$D$$6$Yt&@@U$E @E @D$D$$$E x%E @D$D$$/Dž$Ƌ$D$D$D$t$ L$$$1t $D$$u$$$$t&$dt&E xE @ƒ@@$E xE @D$D$4$4$ƹU$ƹ Dž8$t&E xE @ $$$Ǎ$$$1t$xT!$$D$D$ D$$D$L$$-D$ D$D$$1t$T$D$ $T$BAP ȃQB $׉D$$t41Ҩt ft$Ƌ$D$T$Ot$ L$|$$NjE xE p D$$D$ t$D$$@D$$uf$ht&$8t&$*t&DžeD]t&$T$$t5ƒ/2$D$D$ D$t$$D$$$ht&1Dž,c&x,Ƌ@4$T$F8$&1`Hy@ 9$ƹDž8D$D$ 4$D$4$D$4$D$D$$u$:vfWvxUWVS$$} 4$$yweGȃdT$D$ D$4$4$D$4$D$D$$UBt&$1t $D$$M$Ee[^_]&D$ t&T$D$4$4$D$4$D$D$$}gD$ fIIHȃtD$ Lt&IIׅdWJD$D$$D$D$$$Ƌ$D$D$t$ |$$$1t $D$$M<$$$$f$WvG$nG$$$<$$1t$xT!h$V$D$D$ D$$D$L$$D$ D$D$$1t$T$D$ $T$BAP ȃQB <$D$$t41Ҩt ft$Nj$D$|$ rt$T$$NjD$$D$ D$D$$RD$$}&$|t&$T$$t5ƒ/2$D$D$ D$t$$D$$D$$Uf$$]t&@@Y$$E @:E @D$D$$E xE @D$D$$$Ƌ$D$D$t$ |$$<$$$$1t $D$$UR$t&$t&E xE @$$$$<$$1t$xT!$$D$D$ D$$D$L$$D$ D$D$$1t$T$D$ $T$BAP ȃQB <$׋D$$t4d1Ҩt ft$Ƌ$D$T$t$ L$$NjE xE pD$$D$ t$D$$@D$$U$$Wt&$@t&$+t&xt&$T$$t5ƒ/2$D$D$ D$t$$D$$D$$U<$fDžDž?[&Ɖx,@4$T$F8$&1sHy@ K&vfWSv$UWVS$4$} 4$$yG~G$D$ <$D$T$<$T$<$T$4$D$M4$Ee[^_]t&GG$GWJGƒ $ݍ߭ݝݝf. $$$<$$1t $xTWb$D$D$D$ D$$D$L$$D$ D$D$$ 1t$D$ $L$T$BH BJA <$ǂ<$D$BD$T$L$D$ T$$D$$D$ <$D$D$ɉR|$4$}v$1t $D$4$UvD$D$ <$D$<$D$<$D$4$D$}Ct&$P$GP$.&Pz*@ f]&D$D$ |$T$D$$xH$1t $D$4$M<$v$T$D$ D$D$D$$D$$afJ,B4$L$B8$t&1Hy=@ *UWVS$$u <$$NjFF$FF$t~F$T~VB$ƍ$$1t $T$u$D$D$ D$$D$T$$D$ D$D$$1t$D$ T$$L$FH FNA $džD$$D$ VT$D$$D$$D$ D$ $D$v<[t&T$D$ D$4$4$D$4$D$D$$M$Ee[^_]&$1t$랍&D$ D$D$$xt$1t $D$$U$)v$t&$T$D$ D$D$<$D$<$D$A$/$XN,F4$L$F8$&1Hy@ aUWVS$$u <$$NjFF$FF$t~F$T~VB$ƍ$$1t $T$u$D$D$ D$$D$T$$D$ D$D$$1t$D$ T$$L$FH FNA $džD$$D$ VT$D$$D$$D$ D$ $D$v<[t&T$D$ D$4$4$D$4$D$D$$M$Ee[^_]&$1t$랍&D$ D$D$$xt$1t $D$$U$)v$t&$T$D$ D$D$<$D$<$D$A$/$XN,F4$L$F8$&1Hy@ aUWVS$<$u <$$‹zNFD$ D$4$D$4$D$4$D$D$<$M<$Ee[^_]$1t$뫍&RR1D$D$$ ~F$~vF$ƍ$$1t$xTj$X$D$D$ D$$D$T$$ƒD$ D$D$$1҉t$‹D$ L$$D$FP FVB $dž$D$$D$VщL$T$ $$D$D$ D$L$$v<$D$M&$D$D$D$ $$1t $D$<$M$$t&D$ :&$$1$T$$t$D$D$ 4$D$4$D$V,F4$T$F8$PzA@ .UWVS$<$u <$$‹zNFD$ D$4$D$4$D$4$D$D$<$M<$Ee[^_]$1t$뫍&RR1D$D$$ ~F$~vF$ƍ$$1t$xTj$X$D$D$ D$$D$T$$ƒD$ D$D$$1҉t$‹D$ L$$D$FP FVB $dž$D$$D$VщL$T$ $$D$D$ D$L$$v<$D$M&$D$D$D$ $$1t $D$<$M$$t&D$ :&$$1$T$$t$D$D$ 4$D$4$D$V,F4$T$F8$PzA@ .UWVS$<$u <$$‹zF~FЃL$D$ D$4$4$D$4$D$D$<$M<$Ee[^_]$1t$밍&RRB$F(FD$D$$~F$$D$D$D$L$ $$1t $D$<$U$$wt&$t&$~F$~VB$ƍ$$1t $xTy$g$D$D$ D$$D$T$$D$ D$D$$1t$T$D$ $T$FH FNA $džD$$ $D$NʉT$L$L$ $D$$D$ D$$D$v<$D$U$ $T$$t$D$D$ 4$D$4$D$<$D$ut&$,t&N,F4$L$F8$1Hy@ oUWVS$<$u <$$‹zF~FЃL$D$ D$4$4$D$4$D$D$<$M<$Ee[^_]$1t$밍&RRB$F(FD$D$$~F$$D$D$D$L$ $$1t $D$<$U$$wt&$t&$~F$~VB$ƍ$$1t $xTy$g$D$D$ D$$D$T$$D$ D$D$$1t$T$D$ $T$FH FNA $džD$$ $D$NʉT$L$L$ $D$$D$ D$$D$v<$D$U$ $T$$t$D$D$ 4$D$4$D$<$D$ut&$,t&N,F4$L$F8$1Hy@ oUWVS$<$u <$$yF@F$~ZF$hFF$~F$D$D$ D$D$$$1t $D$<$M$=t&$1t $D$<$M<$Ee[^_]v$fT$D$ D$4$4$D$4$D$<$D$U?&$t&$t&~F$ ~VB$ƍ$$1t $xTY$G$D$D$ D$$D$T$$D$ D$D$$1t$D$ T$$L$FH FNA $džD$$FL$D$D$ D$$D$$D$ D$$D$v&$$$T$D$ D$D$4$D$4$D$<$D$U &$Lt&N,F4$L$F8$1Hy"@ UWVS$<$u <$$‹zNXgFgD$ D$4$D$4$D$4$D$<$D$U?&$1t $D$<$M<$Ee[^_]vD$ D$4$D$4$D$4$D$uD$ fD$ &RR$~qF$PFFD$D$$~F$~MF$$D$D$L$D$L$ $$1t $D$<$M$$D$D$ 4$D$4$D$4$D$D$ Pt&$$E$~F $D~NA􉅼$ƍ$$1t$xT$$D$D$ D$$D$T$$ƒD$ D$D$$1҉t$‹D$ L$$D$FP FVB $dž$D$$D$VщL$T$T$T$ $$D$D$ D$L$$v<$D$Mf$sf$$T$$t$D$D$ 4$D$4$D$$V,F4$T$F8$1yPz@ OUWVS$<$u <$$yF(0F$c~wF$~F$KFF$~F$~iF$D$D$D$ D$D$$$1t $D$<$U$hT$D$ D$4$4$D$4$D$D$<$M<$Ee[^_]$1t$밍&D$ T$D$4$4$D$4$D$D$<$UMv$mD$ D$T$4$4$D$4$D$D$ 밍t&$t&$Ct&$t&D$ &D$ {&~F $~VB$ƍ$$1t $xTq$_$D$D$ D$$D$T$$D$ D$D$$1t$T$D$ $T$FH FNA $dž $D$NL$D$D$D$ D$$ $D$D$ D$T$$v&$t&$W$$T$D$ D$D$4$D$4$D$N,F4$L$F8$1Hy @ wUWVS$<$u <$$‹zNXgFgD$ D$4$D$4$D$4$D$<$D$U?&$1t $D$<$M<$Ee[^_]vD$ D$4$D$4$D$4$D$uD$ fD$ &RR$~F$XFFD$D$$~F$~ݝUF$ݝ$D$D$D$D$L$ $$1t $D$<$M$$D$D$ 4$D$4$D$4$D$D$ Ht&$$=$~F $<~NA􉅴$ƍ$$1t$xT$$D$D$ D$$D$T$$ƒD$ D$D$$1҉t$‹D$ L$$D$FP FVB $dž$D$$VщL$T$\$ D$T$$$D$D$ D$L$$v<$D$Mf$cf$$T$$t$D$D$ 4$D$4$D$$V,F4$T$F8$1qPz@ GUWVS$<$u <$$yF08F$k~F$~F$SFF$~F$~ݝqF$ݝD$D$D$D$L$ $$1t $D$<$U$hT$D$ D$4$4$D$4$D$D$<$M<$Ee[^_]$1t$밍&D$ T$D$4$4$D$4$D$D$<$UMv$eD$ D$T$4$4$D$4$D$D$ 밍t&$yt&$;t&$t&D$ &D$ {&~F $~VB$ƍ$$1t $xTy$g$D$D$ D$$D$T$$D$ D$D$$1t$T$D$ $T$FH FNA $dž $D$ND$T$L$D$\$ $ $D$D$ D$T$$v&$t&$G$$T$D$ D$D$4$D$4$D$N,F4$L$F8$1Hy@ oUWVS$$} 4$$OƋ~GЃD$ D$4$D$4$D$4$D$D$$U$Ee[^_]$1t$럍&RR+D$D$$G$G$Ǎ$$1t$~T,$$D$D$ D$$D$T$$ƒlD$ D$D$$1҉t$‹D$ L$$D$GP GWB $LJD$$ $OT$D$ D$L$$D$$D$ D$$D$D$$Uot&$D$D$D$ D$$1,0T$D$$&|$D$ D$ $t$ $D$D$ D$D$$<$;|iD$$U$$vD$ ~&$m$k1$T$$D$D$ t$<$D$<$D$t&W,G4$T$G8$ &Pz@ tUWVS$<$u <$$‹zNoFЃmD$ D$4$D$4$D$4$D$D$<$M<$Ee[^_]f$1t$믍&D$ F&D$ D$4$D$4$D$4$D$<$D$U&t&D$ &RR$~qF$NFFD$D$$~F$~MF$$D$D$L$D$L$ $D$L$$<$D$M$$LD$D$ 4$D$4$D$4$D$D$ Z$$E$~F $D~NA􉅸$ƍ$$1t$xT$$D$D$ D$$D$T$$ƒ D$ D$D$$1҉t$‹D$ L$$D$FP FVB $dž$D$$D$VщL$T$T$T$ $$D$D$ D$L$$v<$D$Mf$sf$$T$$t$D$D$ 4$D$4$D$&$ V,F4$T$F8$1Pz@ WUWVS$4$} 4$$yGHoG$GG$G$T$D$D$ <$D$<$D$<$D$OD$D$ <$D$<$D$<$D$D$4$U4$Ee[^_]$1t$뫍&D$D$ <$D$<$D$<$D$Bt&$DVGD$$T$$$T$$$G$9weD$ D$<$D$<$D$$Pt&G $9:);&Gƒ $ݍ߭ݝݝf.z D$D$ <$D$<$D$f$et&$$t&D$ &Pz@ t $"DžDžG$$Ǎ$$1t $xT6$$$D$D$ D$$D$L$$D$ D$D$$1t$T$D$ $T$GH GOA $LJ $D$WыL$T$D$T$T$ D$T$$ $D$D$ D$T$$2$JD$D$T$D$D$ D$D$$D$T$$4$D$U$`$$$T$D$ D$D$<$D$<$D$O,G4$L$G8$1HyF@ 3UWVS$<$u <$$yF8F$FF$~F$T$~FD$$T$$$T$$$~oF$9o~F $97);#~YFP$DžDžk~'F$5$ƍ$$1t $xT$$D$D$ D$$D$L$$D$ D$D$$1t$T$D$ $T$FH FNA $džD$$D$NL$D$D$D$ T$D$$D$$D$ D$$D$v^D$D$ D$4$4$D$4$D$D$<$U<$Ee[^_]t&$1t$묍&$t&D$D$ 4$D$4$D$4$D$<$D$M#t&$$t&D$ D$D$c${t&D$D$ 4$D$4$D$4$D$$t&D$D$T$D$D$ D$D$$D$T$$<$D$M$W$t&$$|&$T$D$ D$D$4$D$4$D$<$D$UN,F4$L$F8$1yHy@ MUWVS$4$4$$M NjE ID$D$ T$<$<$D$<$D$4$D$M4$Ee[^_]t&$1t $D$4$U묍U RуRR$E HE @D$D$$9E xE @$ $$$t$T^$L$D$D$ D$$D$L$$D$ D$D$$1t$T$D$ $T$AP ȃQB $ǂ $D$ $D$щL$T$ $E xE @D$$D$ D$D$$҉@4$D$}$Zf$D$D$ D$$0|$D$$4$D$}$$O$t&$t&$]$T$$|$D$D$ <$D$<$D$t&@4P,$T$B8$v1Hy@  UWVS$4$4$$M NjE ID$D$ T$<$<$D$<$D$4$D$M4$Ee[^_]t&$1t $D$4$U묍U RуRR$E HE @D$D$$9E xE @$ $$$t$T^$L$D$D$ D$$D$L$$D$ D$D$$1t$T$D$ $T$AP ȃQB $ǂ $D$ $D$щL$T$ $E xE @D$$D$ D$D$$҉@4$D$}$Zf$D$D$ D$$0|$D$$4$D$}$$O$t&$t&$]$T$$|$D$D$ <$D$<$D$t&@4P,$T$B8$v1Hy@  UWVS$<$<$$ƋE ~E HT$D$ D$4$4$D$4$D$<$D$M<$Ee[^_]&$1t $D$<$u몍rE @$E HɋE @$5E xE @$ $$$t$~Tb$P$D$D$ D$$D$L$$D$ D$D$$1t$D$ T$$L$AP ȃQB $ǂ $D$BD$ L$D$$E xE @D$$D$ D$D$$҉@u$fD$ D$D$$0t$D$$<$D$U$k&$$t&$a$T$D$ D$D$4$D$4$D$<$D$ut&@4P,$T$F8$v1Hy@ UWVuSd$ĉ4$}4$$tAM UԉD$$L$Eԃ4$D$4$e[^_]vUVSd$4$t$D$$d$[^]node::ReqWrap::~ReqWrap() [with T = uv_fs_s] _@@$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0sAB EC@ AAA B ,PAB Fz AAA J 0 AB EC AAA B 0AB HC AAA J , AB HC AAA H 0x AB HC= AAA J ,LAB AH AAA D ,| AB HC AAA F ,AB BG AAA H 0AB HC AAA J 0AB HC AAA J ,DAB AH AAA I ,tAB AH AAA I ,AB AH AAA D ,AB AH AAA D 0AB AH AAA F 08 AB AH; AAA F 0lAB AHm AAA D 0 AB AH; AAA F 0AB AHu AAA D ,XAB HC AAA I ,8 AB AH AAA E 0hO AB BG AAA I 0 AB AHy AAA H ,AB BG AAA H ,AB BG AAA H ,0AB AH AAA J ,`AB BDf AAA F $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.text.unlikely._ZN4node4File10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node4File10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node16BuildStatsObjectEPNS_7commonsEPK4stat.rel.text._ZN4node16BuildStatsObjectEPNS_7commonsEPK4stat.text.unlikely._ZN4nodeL5AfterEP7uv_fs_s.rel.text._ZN4nodeL5AfterEP7uv_fs_s.rel.rodata._ZN4nodeL5AfterEP7uv_fs_s.rodata.str1.4.text.unlikely._ZN4node4File5CloseERKN2v89ArgumentsE.rel.text._ZN4node4File5CloseERKN2v89ArgumentsE.text.unlikely._ZN4node4File7SymlinkERKN2v89ArgumentsE.rel.text._ZN4node4File7SymlinkERKN2v89ArgumentsE.text.unlikely._ZN4node4File4LinkERKN2v89ArgumentsE.rel.text._ZN4node4File4LinkERKN2v89ArgumentsE.text.unlikely._ZN4node4File8ReadLinkERKN2v89ArgumentsE.rel.text._ZN4node4File8ReadLinkERKN2v89ArgumentsE.text.unlikely._ZN4node4File6RenameERKN2v89ArgumentsE.rel.text._ZN4node4File6RenameERKN2v89ArgumentsE.text.unlikely._ZN4node4File9FTruncateERKN2v89ArgumentsE.rel.text._ZN4node4File9FTruncateERKN2v89ArgumentsE.text.unlikely._ZN4node4File9FdatasyncERKN2v89ArgumentsE.rel.text._ZN4node4File9FdatasyncERKN2v89ArgumentsE.text.unlikely._ZN4node4File5FsyncERKN2v89ArgumentsE.rel.text._ZN4node4File5FsyncERKN2v89ArgumentsE.text.unlikely._ZN4node4File6UnlinkERKN2v89ArgumentsE.rel.text._ZN4node4File6UnlinkERKN2v89ArgumentsE.text.unlikely._ZN4node4File5RMDirERKN2v89ArgumentsE.rel.text._ZN4node4File5RMDirERKN2v89ArgumentsE.text.unlikely._ZN4node4File5MKDirERKN2v89ArgumentsE.rel.text._ZN4node4File5MKDirERKN2v89ArgumentsE.text.unlikely._ZN4node4File5ChmodERKN2v89ArgumentsE.rel.text._ZN4node4File5ChmodERKN2v89ArgumentsE.text.unlikely._ZN4node4File6FChmodERKN2v89ArgumentsE.rel.text._ZN4node4File6FChmodERKN2v89ArgumentsE.text.unlikely._ZN4node4File5ChownERKN2v89ArgumentsE.rel.text._ZN4node4File5ChownERKN2v89ArgumentsE.text.unlikely._ZN4node4File6FChownERKN2v89ArgumentsE.rel.text._ZN4node4File6FChownERKN2v89ArgumentsE.text.unlikely._ZN4node4File6UTimesERKN2v89ArgumentsE.rel.text._ZN4node4File6UTimesERKN2v89ArgumentsE.text.unlikely._ZN4node4File7FUTimesERKN2v89ArgumentsE.rel.text._ZN4node4File7FUTimesERKN2v89ArgumentsE.text.unlikely._ZN4node4File7ReadDirERKN2v89ArgumentsE.rel.text._ZN4node4File7ReadDirERKN2v89ArgumentsE.text.unlikely._ZN4node4File4OpenERKN2v89ArgumentsE.rel.text._ZN4node4File4OpenERKN2v89ArgumentsE.text.unlikely._ZN4node4File5WriteERKN2v89ArgumentsE.rel.text._ZN4node4File5WriteERKN2v89ArgumentsE.text.unlikely._ZN4node4File4ReadERKN2v89ArgumentsE.rel.text._ZN4node4File4ReadERKN2v89ArgumentsE.text.unlikely._ZN4node4File4StatERKN2v89ArgumentsE.rel.text._ZN4node4File4StatERKN2v89ArgumentsE.text.unlikely._ZN4node4File5LStatERKN2v89ArgumentsE.rel.text._ZN4node4File5LStatERKN2v89ArgumentsE.text.unlikely._ZN4node4File5FStatERKN2v89ArgumentsE.rel.text._ZN4node4File5FStatERKN2v89ArgumentsE.text.unlikely._ZN4node16BuildStatsObjectEPK4stat.rel.text._ZN4node16BuildStatsObjectEPK4stat.text.unlikely._GLOBAL__sub_I_node_file.cc.rel.text.startup._GLOBAL__sub_I_node_file.cc.rel.init_array.rodata._ZZN4node7ReqWrapI7uv_fs_sED4EvE19__PRETTY_FUNCTION__.rel.data.rel.node_fs_module.bss._ZStL8__ioinit.rodata.cst4.rodata.cst8.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    (0c "#%&()+,./124578:;=>@ACDFGIJLMOPRSUVXY[\^_^F_zfacdfghikl  &-7=CKPV\airy &,28>DJPV\bhnhtz g" P06=>Ysw   H#3)&/\5@;AxGMSY_ekqw!~ 5pSkjs"i.Q{8\ J P-&W)}  #/2XGBSgVYx  ),PO Mv58 ;> A7D_( V     :  j      > L e ~   & - N n u         O ~     )AOg '4@LXe~ ^*6B\e}dnode_file.cc_ZN4nodeL5AfterEP7uv_fs_s_ZZN4node7ReqWrapI7uv_fs_sED4EvE19__PRETTY_FUNCTION___GLOBAL__sub_I_node_file.cc_ZStL8__ioinit.L87.LC0.LC1.LC2.LC3.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC23.LC24.LC25.LC26.LC27.LC29.LC30.LC31.LC32.LC33.LC34.LC35.LC36.LC37.LC39.LC40.LC41.LC42.LC43.LC44.LC38.LC46.LC47.L75.L102.L77.L78.L79.L80.LC49.LC51.LC50.LC53.LC54.LC55.LC56.LC57.LC58.LC60.LC61.LC63.LC65.LC66.LC68.LC72.LC75.LC78.LC81.LC80.LC83.LC82.LC86.LC85.LC89.LC88.LC91.LC90.LC92.LC94.LC98.LC97.LC100.LC99.LC104.LC103.LC102.LC105.LC106.LC108.LC112_ZN4node4File10InitializeEN2v86HandleINS1_6ObjectEEE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node4File5CloseERKN2v89ArgumentsE_ZN2v86String9NewSymbolEPKci_ZN4node4File4OpenERKN2v89ArgumentsE_ZN4node4File4ReadERKN2v89ArgumentsE_ZN4node4File9FdatasyncERKN2v89ArgumentsE_ZN4node4File5FsyncERKN2v89ArgumentsE_ZN4node4File6RenameERKN2v89ArgumentsE_ZN4node4File9FTruncateERKN2v89ArgumentsE_ZN4node4File5RMDirERKN2v89ArgumentsE_ZN4node4File5MKDirERKN2v89ArgumentsE_ZN4node4File7ReadDirERKN2v89ArgumentsE_ZN4node4File4StatERKN2v89ArgumentsE_ZN4node4File5LStatERKN2v89ArgumentsE_ZN4node4File5FStatERKN2v89ArgumentsE_ZN4node4File4LinkERKN2v89ArgumentsE_ZN4node4File7SymlinkERKN2v89ArgumentsE_ZN4node4File8ReadLinkERKN2v89ArgumentsE_ZN4node4File6UnlinkERKN2v89ArgumentsE_ZN4node4File5WriteERKN2v89ArgumentsE_ZN4node4File5ChmodERKN2v89ArgumentsE_ZN4node4File6FChmodERKN2v89ArgumentsE_ZN4node4File5ChownERKN2v89ArgumentsE_ZN4node4File6FChownERKN2v89ArgumentsE_ZN4node4File6UTimesERKN2v89ArgumentsE_ZN4node4File7FUTimesERKN2v89ArgumentsE_ZN4node11StatWatcher3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node11StatWatcher5StartERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node11StatWatcher4StopERKN2v89ArgumentsE_ZN2v811HandleScopeD1Ev_ZN2v87Isolate10GetCurrentEv_ZN4node16BuildStatsObjectEPNS_7commonsEPK4stat_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZNK2v88Function11NewInstanceEv_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v86Number3NewEd_ZN2v84Date3NewEd_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v84NullEv_ZNK2v85Value8ToObjectEv_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEEuv_fs_req_cleanup_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZdlPv_ZN4node11UVExceptionEiPKcS1_S1__ZN2v85Array3NewEPNS_7IsolateEistrlen__assert2_ZNK2v85Value7IsInt32Ev_ZNK2v85Value10Int32ValueEv_ZNK2v85Value10IsFunctionEv_Znaj_ZN2v86Object3NewEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEEuv_fs_close_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v89UndefinedEvuv_last_error_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringdeEvuv_fs_symlink_ZN6jxcore8JXStringD1Ev_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPvuv_fs_linkuv_fs_readlinkuv_fs_rename_ZNK2v85Value11NumberValueEv_ZNK2v85Value12IntegerValueEvuv_fs_ftruncateuv_fs_fdatasyncuv_fs_fsyncuv_fs_unlinkuv_fs_rmdiruv_fs_mkdiruv_fs_chmoduv_fs_fchmod_ZNK2v85Value8IsUint32Ev_ZNK2v85Value11Uint32ValueEvuv_fs_chownuv_fs_fchown_ZNK2v85Value8IsNumberEv_ZNK6jxcore8JXStringdeEvuv_fs_utimeuv_fs_futimeuv_fs_readdiruv_fs_open_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN2v89Exception10RangeErrorENS_6HandleINS_6StringEEEuv_fs_writeuv_fs_readuv_fs_statuv_fs_lstatuv_fs_fstat_ZN4node16BuildStatsObjectEPK4stat_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_fs_module  $,4m P!* QDek R S4U[w T  U$EKgy V W5;Wir X Y%+GYb Z| [7IR \l ] '9M ^\} _)2 `Lms a  " b< ] c    c      d, M S o   e      f = C _ q z g      h - ; F N T s    i     j 8 \ b ~  k     -8CQd  "FUg l m%I_~ n o1P p` q" r2Vj~ s t7V uf v  w4 xGk~ w y w z%IXx { {  $,4x BPx5nM | G } N ~  ~ ~ N  $ ( , 0 4 8 < @ D H L P T X \ ` d  -5=u0Ggy Dh Q "Ox  #\n  Q#8`  *2: ";M (J6F~"  H^p ' Qvdp _ :p     _  *     ; P e    -5= -@` |  +=JXf9Mm #l  ^= "Kj $ ^:Up   "*2| p2Xjv ;_ ` O|F[n|/ 9 `EZ  *2:z  # Pd-;IWp7Kk !j  V= 8at)Xb l V& @   %-5d a *bz 6c W5 i 0 Ncx  W1L  -5=u0Ggy Dh T "Ox  #\n  T#8`  -5=u0Ggy Dh U  "Ox  #\ n  U#8`  %-5  #hDVb !G a  #Ps  *@ h  a  \v  %-5  #hDVb !G X  #Ps  *@ h  X  \v  %-5 K 5ATbz2Iu +Rv Y 8 \- 7 YCXm  %-5 K 5ATbz2Iu +Rv c 8 \- 7 cCXm  %-5r?Unz, DYn2Ri Kr d Pt   dAVk  %-5  #/<X v  KBXq}  "Jx !M_k *P e @m)= G eSh  %-53Q  "7Lan 6X n  8 d + UzNZ fx !Rx  f Tn  %-5  #/<X v  KJ`y   *R)Ugs  2X   ,P}"9M W cx  %-53Q *?Tiv >` v   @ l'3 ]Vb  1b  .d~  -5= 3x "BT` Ey Z <e@n (J  Z(  %-5 3H h  SJn   *Rz)Ugs  2X R $Hu1E O R[p  %-5h  =Rg|  8n !6Jz* H]r ey  @e9E bc "X  / W   b      %-5h4Ec/C_ /x S-6   .CXmz 0Eh  #8Z*Jl  S 5 O   "*2v x %:`r~ Cg [ ![$H]p~/ 9 [EZ  "*2v x %:`r~ Cg \ ! [$ H]p~/ 9 \EZ  "*2l  \.Tfr  7[ ] !Gt !0EXr  ]#8M  '/I[e  I#( $2%:&C  T  PH!x#%')<+p-/1 3<5l79;=4?dACL 4 o @oH!H'H,2H;-0s @o @0o 7kd  ` @oh @o2 @o$Y$ U @L!o00x  @$8oH:&P:" @<&oU0A0A  @'Ho JJ @<*o#)RfRb @,o&XX @-o)^5^1 @4/o,bee @0o/0l0l @2o2,@se@sa @d4o5PzPz @46o8`1` - @7@o;]jp @4:(o>  @\<@oA+*f0b @>(oDX  @@oG85 @ 1 @B8oJ` J PO  @DhoM    @,GPoP(  `  \ @|IoS   @::~ReqWrap() [with T = uv_shutdown_s]node::ReqWrap::~ReqWrap() [with T = uv_write_s]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (CAB CyAAA (HoAB F`AAA  t1AB AkA $;AB BsAA /AB A,AB Ch AAA G 8 AB C@ AAA G ^AAA (HOAB CEAAA ,tAB BD AAA D ,AB BD AAA E ,*AB C~ AAA A ,AB BD AAA C ,4AAB BD AAA I <d AB C AAA B  AAA A FAB A@A  FAB A@A ,AB F AAA G ,AB F AAA H ,L:AB F( AAA D ,|VAB AEGAAA ,uAB F: AAA J ,VAB AEGAAA , :AB F( AAA D ,<VAB AEGAAA $lFAB B~AA (8AB CnAAA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4nodeL19DeleteSlabAllocatorEPv.rel.text._ZN4nodeL19DeleteSlabAllocatorEPv.text.unlikely._ZN4node10StreamWrap7OnAllocEP11uv_handle_sj.rel.text._ZN4node10StreamWrap7OnAllocEP11uv_handle_sj.text.unlikely._ZN4node10StreamWrapD2Ev.rel.text._ZN4node10StreamWrapD2Ev.text.unlikely._ZN4node10StreamWrapD0Ev.rel.text._ZN4node10StreamWrapD0Ev.rodata.str1.1.rel.text.unlikely._ZN4node7ReqWrapI10uv_write_sED2Ev.part.14.text.unlikely._ZN4node10StreamWrap13AfterShutdownEP13uv_shutdown_si.rel.text._ZN4node10StreamWrap13AfterShutdownEP13uv_shutdown_si.text.unlikely._ZN4node10StreamWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node10StreamWrap10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._ZN4node10StreamWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_stream_s.rel.text._ZN4node10StreamWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_stream_s.text.unlikely._ZN4node10StreamWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE.rel.text._ZN4node10StreamWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE.text.unlikely._ZN4node10StreamWrap20UpdateWriteQueueSizeEPKNS_7commonsE.rel.text._ZN4node10StreamWrap20UpdateWriteQueueSizeEPKNS_7commonsE.text.unlikely._ZN4node10StreamWrap10AfterWriteEP10uv_write_si.rel.text._ZN4node10StreamWrap10AfterWriteEP10uv_write_si.rodata.str1.4.text.unlikely._ZN4node10StreamWrap9ReadStartERKN2v89ArgumentsE.rel.text._ZN4node10StreamWrap9ReadStartERKN2v89ArgumentsE.text.unlikely._ZN4node10StreamWrap8ReadStopERKN2v89ArgumentsE.rel.text._ZN4node10StreamWrap8ReadStopERKN2v89ArgumentsE.text.unlikely._ZN4node10StreamWrap12OnReadCommonEP11uv_stream_si8uv_buf_t14uv_handle_type.rel.text._ZN4node10StreamWrap12OnReadCommonEP11uv_stream_si8uv_buf_t14uv_handle_type.text.unlikely._ZN4node10StreamWrap6OnReadEP11uv_stream_si8uv_buf_t.rel.text._ZN4node10StreamWrap6OnReadEP11uv_stream_si8uv_buf_t.text.unlikely._ZN4node10StreamWrap7OnRead2EP9uv_pipe_si8uv_buf_t14uv_handle_type.rel.text._ZN4node10StreamWrap7OnRead2EP9uv_pipe_si8uv_buf_t14uv_handle_type.text.unlikely._ZN4node10StreamWrap11WriteBufferERKN2v89ArgumentsE.rel.text._ZN4node10StreamWrap11WriteBufferERKN2v89ArgumentsE.text.unlikely._ZN4node10StreamWrap8ShutdownERKN2v89ArgumentsE.rel.text._ZN4node10StreamWrap8ShutdownERKN2v89ArgumentsE.text.unlikely._ZN4node10StreamWrap15WriteStringImplILNS_8encodingE0EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE.rel.text._ZN4node10StreamWrap15WriteStringImplILNS_8encodingE0EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE.text.unlikely._ZN4node10StreamWrap16WriteAsciiStringERKN2v89ArgumentsE.rel.text._ZN4node10StreamWrap16WriteAsciiStringERKN2v89ArgumentsE.text.unlikely._ZN4node10StreamWrap15WriteStringImplILNS_8encodingE1EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE.rel.text._ZN4node10StreamWrap15WriteStringImplILNS_8encodingE1EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE.text.unlikely._ZN4node10StreamWrap15WriteUtf8StringERKN2v89ArgumentsE.rel.text._ZN4node10StreamWrap15WriteUtf8StringERKN2v89ArgumentsE.text.unlikely._ZN4node10StreamWrap15WriteStringImplILNS_8encodingE3EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE.rel.text._ZN4node10StreamWrap15WriteStringImplILNS_8encodingE3EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE.text.unlikely._ZN4node10StreamWrap15WriteUcs2StringERKN2v89ArgumentsE.rel.text._ZN4node10StreamWrap15WriteUcs2StringERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_stream_wrap.cc.rel.text.startup._GLOBAL__sub_I_stream_wrap.cc.rel.init_array.text.unlikely._ZN4node10StreamWrap9SetHandleEP11uv_handle_s.rel.text._ZN4node10StreamWrap9SetHandleEP11uv_handle_s.rodata._ZZN4node7ReqWrapI13uv_shutdown_sED4EvE19__PRETTY_FUNCTION__.rodata._ZZN4node7ReqWrapI10uv_write_sED4EvE19__PRETTY_FUNCTION__.rel.data.rel.ro._ZTVN4node10StreamWrapE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group   C  2/]3\6[ "#%&()+,-/0235689;<>?ABDEGHJKMNPQSTFT_VXY[\]_`bc &+ +X+#5)@/G5aN`dzo@L1"e!]}1";" Bz)AO|"(QkO 'O g#&Pt*)-NF6F9A0( 5 3    J      5 R r   <   % m v   ?  :"B; S   2fVEu"HYVK:"N?VQw8Ystream_wrap.cc_ZN4nodeL19DeleteSlabAllocatorEPv_ZN4node7ReqWrapI10uv_write_sED2Ev.part.14_ZZN4node7ReqWrapI10uv_write_sED4EvE19__PRETTY_FUNCTION___ZZN4node7ReqWrapI13uv_shutdown_sED4EvE19__PRETTY_FUNCTION___GLOBAL__sub_I_stream_wrap.cc_ZStL8__ioinit.LC4.LC5.LC11.LC14.LC15.LC18.LC19.LC23.LC26_ZN4node10StreamWrapD5Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN4node7commons11getInstanceEv_ZN4node13SlabAllocatorD1Ev_ZdlPv_ZN4node10StreamWrap7OnAllocEP11uv_handle_sj_ZNK2v85Value8ToObjectEv_ZN4node13SlabAllocator8AllocateEN2v86HandleINS1_6ObjectEEEjuv_buf_init_ZN4node10StreamWrapD2Ev_ZTVN4node10StreamWrapE_ZN4node10HandleWrapD2Ev_ZN4node10StreamWrapD1Ev_ZN4node10StreamWrapD0Ev__assert2_ZN4node10StreamWrap13AfterShutdownEP13uv_shutdown_si_ZN2v811HandleScopeC1Ev_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Evuv_last_error_ZN4node11SetCOMErrnoEPNS_7commonsE8uv_err_s_ZN2v87Isolate10GetCurrentEv_ZN4node10StreamWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_Znwj_ZN4node13SlabAllocatorC1EjPNS_7commonsE_ZN4node6AtExitEPFvPvES0__ZN4node10HandleWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN4node10StreamWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_stream_s_ZN4node10HandleWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_handle_s_ZN4node10StreamWrapC1EN2v86HandleINS1_6ObjectEEEP11uv_stream_s_ZN4node10StreamWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN4node10StreamWrap20UpdateWriteQueueSizeEPKNS_7commonsE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node10StreamWrap10AfterWriteEP10uv_write_si_ZdaPv_ZN2v86Object6DeleteENS_6HandleINS_6StringEEE_ZN4node10StreamWrap9ReadStartERKN2v89ArgumentsE_ZN4node10StreamWrap6OnReadEP11uv_stream_si8uv_buf_tuv_read_start_ZN4node10StreamWrap7OnRead2EP9uv_pipe_si8uv_buf_t14uv_handle_typeuv_read2_startstderrfprintfabort_ZN4node10StreamWrap8ReadStopERKN2v89ArgumentsEuv_read_stop_ZN4node10StreamWrap12OnReadCommonEP11uv_stream_si8uv_buf_t14uv_handle_type_ZN4node13SlabAllocator6ShrinkEN2v86HandleINS1_6ObjectEEEPcj_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v86Object3HasENS_6HandleINS_6StringEEE_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN4node13ExecuteDirectEPNS_7commonsEN2v86HandleINS2_6ObjectEEEPcjjjPi_ZN4node7TCPWrap11InstantiateEv_ZN4node7TCPWrap8UVHandleEvuv_accept_ZN4node8PipeWrap11InstantiateEv_ZN4node8PipeWrap8UVHandleEv_ZN4node7UDPWrap11InstantiateEv_ZN4node7UDPWrap8UVHandleEv__android_log_print_ZN4node10StreamWrap11WriteBufferERKN2v89ArgumentsE_Znaj_ZN2v86Object3NewEv_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v86Object14SetHiddenValueENS_6HandleINS_6StringEEENS1_INS_5ValueEEEuv_write_ZN2v84NullEv_ZN2v89UndefinedEv_ZN4node10StreamWrap8ShutdownERKN2v89ArgumentsEuv_shutdown_ZN4node10StreamWrap15WriteStringImplILNS_8encodingE0EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE_ZNK2v86String6LengthEv_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN4node11StringBytes13JXStorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZN4node11StringBytes7JXWriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEbPi_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZNK2v85Value8IsObjectEvuv_write2_ZN4node10StreamWrap16WriteAsciiStringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteStringImplILNS_8encodingE1EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE_ZN4node11StringBytes6JXSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZN4node10StreamWrap15WriteUtf8StringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteStringImplILNS_8encodingE3EEEN2v86HandleINS3_5ValueEEERN6jxcore10PArgumentsE_ZN4node10StreamWrap15WriteUcs2StringERKN2v89ArgumentsE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10StreamWrap9SetHandleEP11uv_handle_s_ZN4node10HandleWrap9SetHandleEP11uv_handle_sY Z['\/] Y Z/_H`[aY Zc&dY Zc'd/]Y Z H B I+gY Z*i__z_jkkl(mSn[]fopqr H A I gY Zi%t-u=o\vtw xyoY Z-{3c Y Zi$t,u^~jor Y ZiE_jjy JorY Z0iW__jkk l>minq|opqlr& Y ZiI~fs^|pqjo-:^Cb Kl Lv Y ZiI~^}pqjo K$ L.8=Y Z=ii_op=qOlm_jjLldzlmorl$_BlZtl__5[ki)o]ieiBi~~~ M N Y Z;Y Z; Y Z%iO~__i )k;kD Oek(o9_Wlp_jl(:`p|qnkoBr K L Y ZiL~fvikk O*dkohp5q]ne]{k_oR K\ Lfpu H A Ig Y Z"iL~ i+?_kqkz Ok-^o_j6lWipqnk&o?q Pa_l7r K L~)r6 Y Zi:Eo Y Z"iL~i=Qqkk O!k?po_ *jHli{pqnk(8oWq P*<Q_l:Ior K L/~Oarq Y Zi:Eo Y Z"iL~ i+?_kqkz Ok-^o_j6lWipqnk&o?q Pa_l7r K L~)r6 Y Zi:EoY Z D( 2:;Y Z%e f L x  Lx!8#h%')+ -P/1357@9p;@ER4fQRH fRT fR` fRlfcRtfY|!|'|,|aC] @f(f o @f(f@(@1$ @f fGrs;o @g(f2\/ @  DJf~u ?~ @@Fb~q A~ B<BV^~m Co~ D8>lH EW}]fg Fv}abO P '( 2:!S T  Dl 0h|<!d(4@GH @}T @`@vh@Op!p'p,pTp1P @2 @ o; @2(@ 2221 @2@M2@ @3@H @H4@J F @4@y"0y @X5@5_1 @5@ m    v @5(@%3 m ^i @ 6@(    @60@+k   @6@.r"F @98@1OK @9@3_[ @9@5 @:@70($$p @:p@= AN (&h pipe_wrap.o/ 1560953076 501 20 100644 21424 ` ELFH4(FC 9>USd$싓D$ R$d$[]UVSd$t$ @4$4$d$[^]PipefdcloseunrefrefreadStartreadStopshutdownwriteBufferwriteAsciiStringwriteUtf8StringwriteUcs2Stringbindlistenconnectopen../src/wrappers/pipe_wrap.ccdomainreq_.data == this../src/jx/commons.huv_pipe_opennode_pipe_wrapUWEVǍuSd$$E<$$EЋD$ D$4$D$}ԃ4$|$EԃD$$D$4$L$MEԃ<$D$EЅ!EċE$EčD$ 4$T$D$Eԃ|$4$EEăD$D$ED$D$T$D$D$ $D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$D$ D$4$D$UԃD$4$D$UEԃ|$4$EEăUD$ D$EԉT$$EЋt$Eǀ|$4$Uԃ1t$MЉ|$4$Eȃ4$D$D$}Eԃ|$D$ D$E$Ẻ$e[^_]Ít&PipeWrap: Aborting due to unwrap failure at %s:%d UWEVSd$u $EPJy@D$ $EUF4F}}D$ED$$E$0ƋExUE؉$EEE$M1t $T$$EED$ED$ D$E$EMD$EL$$U[ED$ UD$ED$E$EUE1t $UMD$ T$$L$FH FNB E$}<$D$F$T$ U$T$vD$E$uE4$D$M<$4$Ee[^_]R t8Bxu_BEt&E$EE&U1JHy@ D$ D$D$$UWUVS$tuUF>@$EE@EEE uE$L$EU$T$Eu4$EEt $E4$}M1t $4$EL$UEJ4$EL$M4$MML$M L$MEMԋME܋EM؋MEMM4$D$EԉD$EUD$D$ ED$B4$D$GOGOH;t$<$E$e[^_]Ít&MF$EF$UExu4$EsEE@ED$D$ D$$UW}VSd$<$E PMċJyD$ $ƅE @E MԉM@$D$F$$T$t3NUȉE$L$EȃỦ$T$EuĉD$Et$$Eԃ<$D$U<$Ee[^_]t&r 0Fxu(vEԉ$EEԃ(&D$ LD$D$$UW}VSd$<$E PJyD$ $ƅ.E @E MԉMċ@$D$F$$Eĉ$Uԃ1t $<$D$M<$Ee[^_]r cFxvNt&Eԉ$EEԃS&V0Eȉ$T$uĉD$ED$D$ 4$D$Eԃ4$D$Eԃ.fD$ D$D$$UWVuSd$} 4$PMJyD$ $…BEGG}ĉ}D$}D$<$U<$UD$$$t3EUE$L$EU$T$EMD$EL$$Eă4$D$M<$4$Ee[^_]fR Bxu+R vUEĉ$EEăU D$ 2D$D$$UWVSd$EpE؉E~$EĉEF $D$EăEE 1t $D$E$EăEPzt@ED$$$D$E$E$e[^_]ËP tɋJ1yuB빍E$T$UET$$}D$<$EăD$D$D$ ED$F<$D$VEEԋ}D$<$EԉD$ED$D$ ED$F<$D$E$e[^_]ZD$$UWVuSd$ĉ4$}4$$tO1t $D$Uԉ$Eԃ4$D$4$e[^_]fEUUSd$D$ Jyt D$l$$d$[]Ðt&R tJ1yuߋBd$[]UWVSd$ԋt$@T$D|$H4$F$T$D$D$D$R|$D$F$Fv,4$D$d$,[^_]UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE UԉUЋ@$D$E }ԋUЋ@~JE @$$EUЉ|$$T$|$4$}sv$EԃUVSd$4$t$D$$d$[^]node::ReqWrap::~ReqWrap() [with T = uv_connect_s] $GCC: (GNU) 4.9.x 20150123 (prerelease)zR|  1AB AkA $@;AB BsAA 0hAB EF AAA E ,AB Fh AAA D ,hAB F AAA E ,AB AE AAA H ,,AB AE AAA I 0\AB BD AAA E <AB C AAA A  AAA A ,AB BDw AAA E 4_AA O g  AAF \ AA(LAB CvAAA ,xAB BDn AAA F $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node8PipeWrapD2Ev.rel.text._ZN4node8PipeWrapD2Ev.text.unlikely._ZN4node8PipeWrapD0Ev.rel.text._ZN4node8PipeWrapD0Ev.rodata.str1.1.text.unlikely._ZN4node8PipeWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node8PipeWrap10InitializeEN2v86HandleINS1_6ObjectEEE.rodata.str1.4.text.unlikely._ZN4node8PipeWrap7ConnectERKN2v89ArgumentsE.rel.text._ZN4node8PipeWrap7ConnectERKN2v89ArgumentsE.text.unlikely._ZN4node8PipeWrap12AfterConnectEP12uv_connect_si.rel.text._ZN4node8PipeWrap12AfterConnectEP12uv_connect_si.text.unlikely._ZN4node8PipeWrap6ListenERKN2v89ArgumentsE.rel.text._ZN4node8PipeWrap6ListenERKN2v89ArgumentsE.text.unlikely._ZN4node8PipeWrap4OpenERKN2v89ArgumentsE.rel.text._ZN4node8PipeWrap4OpenERKN2v89ArgumentsE.text.unlikely._ZN4node8PipeWrap4BindERKN2v89ArgumentsE.rel.text._ZN4node8PipeWrap4BindERKN2v89ArgumentsE.text.unlikely._ZN4node8PipeWrap12OnConnectionEP11uv_stream_si.rel.text._ZN4node8PipeWrap12OnConnectionEP11uv_stream_si.text.unlikely._ZN4node8PipeWrap8UVHandleEv.text._ZN4node8PipeWrap8UVHandleEv.text.unlikely._ZN4node8PipeWrap11InstantiateEv.rel.text._ZN4node8PipeWrap11InstantiateEv.text.unlikely._ZN4node8PipeWrap6UnwrapEN2v85LocalINS1_6ObjectEEE.rel.text._ZN4node8PipeWrap6UnwrapEN2v85LocalINS1_6ObjectEEE.text.unlikely._ZN4node8PipeWrapC2EN2v86HandleINS1_6ObjectEEEb.rel.text._ZN4node8PipeWrapC2EN2v86HandleINS1_6ObjectEEEb.text.unlikely._ZN4node8PipeWrap3NewERKN2v89ArgumentsE.rel.text._ZN4node8PipeWrap3NewERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_pipe_wrap.cc.rel.text.startup._GLOBAL__sub_I_pipe_wrap.cc.rel.init_array.rodata._ZZN4node7ReqWrapI12uv_connect_sED4EvE19__PRETTY_FUNCTION__.rel.data.rel.ro._ZTVN4node8PipeWrapE.rel.data.rel.node_pipe_wrap_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group   58 "#%&'(*+-.0134JF4f=689;=>@Auz"+4@Qaqv}?1" >3Iaz1" ;" "!K1s0M7 7eBrG (X . _      % hV f          , : \ u      #O Y f      & (+ _+^ .  !9  *.Zx;pipe_wrap.cc_ZZN4node7ReqWrapI12uv_connect_sED4EvE19__PRETTY_FUNCTION___GLOBAL__sub_I_pipe_wrap.cc_ZStL8__ioinit.LC2.LC3.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC21.LC19.LC20.LC23.LC24.LC27_ZN4node8PipeWrapD5Ev_ZN4node8PipeWrapD2Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZTVN4node10StreamWrapE_ZN4node10HandleWrapD2Ev_ZN4node8PipeWrapD1Ev_ZN4node8PipeWrapD0Ev_ZdlPv_ZN4node8PipeWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node8PipeWrap3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN4node10StreamWrap10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN4node10StreamWrap5GetFDEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN2v814ObjectTemplate11SetAccessorENS_6HandleINS_6StringEEEPFNS1_INS_5ValueEEENS_5LocalIS2_EERKNS_12AccessorInfoEEPFvS7_NS6_IS4_EESA_ES5_NS_13AccessControlENS_17PropertyAttributeENS1_INS_17AccessorSignatureEEE_ZN4node10HandleWrap5CloseERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node10HandleWrap5UnrefERKN2v89ArgumentsE_ZN4node10HandleWrap3RefERKN2v89ArgumentsE_ZN4node10StreamWrap9ReadStartERKN2v89ArgumentsE_ZN4node10StreamWrap8ReadStopERKN2v89ArgumentsE_ZN4node10StreamWrap8ShutdownERKN2v89ArgumentsE_ZN4node10StreamWrap11WriteBufferERKN2v89ArgumentsE_ZN4node10StreamWrap16WriteAsciiStringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteUtf8StringERKN2v89ArgumentsE_ZN4node10StreamWrap15WriteUcs2StringERKN2v89ArgumentsE_ZN4node8PipeWrap4BindERKN2v89ArgumentsE_ZN4node8PipeWrap6ListenERKN2v89ArgumentsE_ZN4node8PipeWrap7ConnectERKN2v89ArgumentsE_ZN4node8PipeWrap4OpenERKN2v89ArgumentsE_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v811HandleScopeD1Ev_ZN2v87Isolate10GetCurrentEv_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_Znwj_ZN2v86Object3NewEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN6jxcore8JXStringdeEv_ZN4node8PipeWrap12AfterConnectEP12uv_connect_siuv_pipe_connect_ZNK2v85Value8ToObjectEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN6jxcore8JXStringD1Ev_ZN2v89UndefinedEvstderrfprintfabortuv_last_error_ZN4node8SetErrnoE8uv_err_s_ZN2v85FalseEv_ZN2v84TrueEv_ZN2v87Integer3NewEiPNS_7IsolateE_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEEuv_is_readableuv_is_writable__assert2_ZNK2v85Value10Int32ValueEv_ZN4node8PipeWrap12OnConnectionEP11uv_stream_siuv_listenuv_pipe_open_ZN4node11UVExceptionEiPKcS1_S1__ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEEuv_pipe_bind_ZNK2v88Function11NewInstanceEvuv_accept_ZN4node8PipeWrap8UVHandleEv_ZN4node8PipeWrap11InstantiateEv_ZN4node8PipeWrap6UnwrapEN2v85LocalINS1_6ObjectEEE_ZN4node8PipeWrapC2EN2v86HandleINS1_6ObjectEEEb_ZN4node10StreamWrapC2EN2v86HandleINS1_6ObjectEEEP11uv_stream_s_ZTVN4node8PipeWrapEuv_pipe_init_ZN4node10StreamWrap20UpdateWriteQueueSizeEPKNS_7commonsE_ZN4node8PipeWrapC1EN2v86HandleINS1_6ObjectEEEb_ZNK2v85Value12BooleanValueEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node10StreamWrap9SetHandleEP11uv_handle_snode_pipe_wrap_moduleM NO&PM NO'P/SM N$U,V4W=XYYkZ[ 0\]^ 1_Z`LaRbnY 2\cdeY 3\$cHdNfjY~ 4\cdgY 5 \ cDdJhfYz 6\cdiY 7\c@dFjbYv 8\cdkY 9\c<dBl^Yr :\cdmY ;\c8d>nZYn <}\cdoY =\c4d:pVYj >y\cdqY ?\ c0dEr^srts\uvw M N"UGxyzU{t| | @7_S}_|uv~ (<Q^fv A B M N0Um||"XrSv)wH CR )\ Dd M NUIxu{v:Z Ad Bnx} M NUDxp|v .7 E]o A B M NUIxy~ vUr A| BM N(UGq|xv 3cvw M NU'V/WK|ZlvvwM N0xM N4:as M NU$V,W=S|_lvzM N ,( 2:%Q R T Dl 0`P!|#%-b4DFbH DTbTDb\DMd!d'd,dUp1Q @> D q; @?(D 2  @8?pDP2 3_   @BD h @CDK @pDD  @ED%a] @ED z @8FD# Z5`Xhp @FPD(_ @GD+2pupq @(G0D. @XGxD1CF? @G8D4qHm @HD6}`5  @HD9 @(HD; ;0(DXT @@HDAi8% EL //20 1560953079 501 20 100644 54480 ` ELF4( !#$&'12)*./5689;<>?KLBCEFNOQRTUWXZ[]^`acefklqry{UWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]UVSd$t$ dž8$dž4t',9tt $l$Ɔ$dž1dž dž(dž,d$[^]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]UWVuSd$4$E@EUu14$e[^_]ÍvE}ċ@<$D$MEĉE@t<$D$Eă<$D$ED$Eă$EtE@4<$D$EăD$E$1EU@DD$ED$E $@<$D$Eă<$E̋ED$ED$EăD$ EЍẺD$E<$D$ED$EăEƀ=t&@<$D$EăD$<$E̋ED$Eă<$EЋED$ED$EăD$ EԍẺD$TEvE@4<$D$Eă<$D$ED$EăƒPzx@ eUWV|$l$t'1ɍ'8t:D u9u^_]Ð^1_]UVSd$t$ nu(l$t$D$F$F$d$[^]UVSd$t$ @Ft2$D$D$F$Ft$4$d$[^]Parse Error 02bytesParsedcodeAlready parsing a bufferArgument should be a bufferOffset is out of boundsParse Error 01off + len > buffer.lengthAcceptacceptCookiecookiePragmapragmaUser-Agentuser-agentConnectionconnectionSet-Cookieset-cookieCache-Controlcache-controlAccept-Charsetaccept-charsetAccept-Languageaccept-languageAccept-Encodingaccept-encodingWWW-Authenticatewww-authenticateSec-Websocket-Protocolsec-websocket-protocolSec-Websocket-Extensionssec-websocket-extensionsLinklinkDELETEGETHEADPOSTPUTCONNECTOPTIONSTRACECOPYLOCKMKCOLMOVEPROPFINDPROPPATCHSEARCHUNLOCKREPORTMKACTIVITYCHECKOUTMERGEM-SEARCHNOTIFYSUBSCRIBEUNSUBSCRIBEPATCHPURGEMKCALENDARUNKNOWN_METHODParse Error 03executefinishreinitializepauseresumeHTTPParserREQUESTRESPONSEnode_http_parserUWVuSd$E 4$EEЋ@:PJyD$$‹PƂMD$ D$@UЉD$B$UЀMuMEԉ$Uԃ1t $D$4$M4$Ee[^_]B'|$D$ EȍEԉ $D$MEԃD$EЉ$EԃD$EЉ$EЃUԉ|$$D$UEԃ|$D$ EċEЉT$$EăUD$ D$Eԉ$D$Mȉ $D$EЉ|$D$ $Eԃ|$D$ EȋEЉT$$Eȃ}D$ D$Eԉ<$D$|$4$}R  Bxu RvP Eԉ$Uԃ1t $D$4$}.UWVuSd$ĉ4$}4$$xu8E @PJytmD$$D$$Eԉ$Uԃ1t $4$D$4$e[^_]t&R tJ1yuBUWVuSd$ĉ4$}4$$xu8E @PJytmD$$D$$Eԉ$Uԃ1t $4$D$4$e[^_]t&R tJ1yuBUWVSd$ԋ|$@4@t,<9t t$,,t&'-xtH9tt$D$D$9uԍW,~tN9tt$T$T$9uӋ@Gt2$D$D$G$Gt$d$,[^_]Argument must be HTTPParser.REQUEST or HTTPParser.RESPONSE../src/wrappers/node_http_parser.ccUWVuSd$4$4$$M x}  MtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE @PJyD$$EȋEȃPE}ԋÈx(D$ D$EЉ<$D$Eԃ<$D$Eԃ<$D$EԃD$4$}6B Pz@EQt&E @~~E PẺ$UĉD$UĄuD$ D$EЉ<$D$Eԃ<$D$Eԃ<$D$Eԃ~&E<$Uԃut&P T$<$Uԃ<$T$UEԃ$Uĉ<$ET$Eԃ$EċE x!E @E$9Eĉw>D$ D$EЉ<$D$Eԃ<$D$JE xE @$UUE9UE);EEUM@(H MĉEH$MȋEƁMD$ ET$@D$A$M̋UA(A MA<$Uԃ1$f<$Eԃt&<$UEԃU&D$ t&E xE }ԋ@E㠃E x~>E @Pу $D$ E<$EԃЃfE x~@뭐}ԉ<$Eԃff<$Eԃ뇋MЉD$<$L$EẼU9EE@'MЃEȍ<$L$D$ D$UEԃ<$D$Eԃ<$D$EԃMЉ<$E̍L$D$ D$EԃUD$ D$ẺT$$Uȉ$MЉD$<$D$ L$MЃEԍ<$L$D$ T$EEȃ}D$ D$Eԉ<$D$.fPz@ D$EċEȍP$MȋEĀ4t),<9tt $EċMƁ4MȃA ǁ,a ǁ0ǁ8ǁ<ǁDǁHƁLƁM T$4$}BxB zUWVuSd$ĉ4$} 4$$x M'GiG$w}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$EԃD$$UUЉljT$G$UUЀ4t&,<9tt $UƇ4LJ,W LJ0g LJ8LJ<LJDLJHƇLƇMEԉ$Uԃ1t $4$D$M4$Ee[^_]Eԉ$Eԃ$GHyy Gxu T$$4 UWEVSd$$E<$$ƋE ~E̋E xtSEԉ$Uԃ1t $D$EЉ$MEЉ$Ee[^_]~tE MԉMȋ@$Eăv|}ȍD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ[t&Eԉ$EEԃ$EăwE~$E x5E @Ẽ$E$X@@,@G,&@ǀǀǀ@9u΍,&@ǀǀǀ@9uEƇ4LJ,TELJ0LJ8LJ<D$G$4t#,<9t t$Ƈ4Mč@LJ,@ LJ0LJ8O LJ<g LJDLJHƇLƇMP&'09uE @@D$Eȉ$uԃ1t4$G$|$D$|$D$G$G$t$Eȉ$EԃUWVSd$ԋ|$@4@t,<9t t$,,t&'-xtH9tt$D$D$9uԍW,~tN9tt$T$T$9uӋ@Gt2$D$D$G$Gt$<$d$,[^_]UWVSd$ԋT$@D$H(=w ,$l$8$T$T$ʼn(!1ɨt ftD$H(t$D1ɨt ft$tl$l$8$T$l$T$D$H((d$,1[^_]Ít&, ǂ,|9L$DD$HƂ$뒍&t&u|,fD$Ht$D.vD$H2,t$D1ɨt ftD$H(t&vfOovvfO3v}vM8t&vGD$Huu!TvGD$HvfOUWVSd$ԋT$@849in8yt:I ,9tt $l$8T$T$8iƄ$i ǀǀ ǀ(ǀ, D$Hi 2(=w , i :~N l$l$8$T$l$NjT$D$iAq P1ɨt ftiD$H|$t$D (1ɨt ftix@ tl$l$8$T$l$T$i|$x @iD$H*(d$,1[^_]Ð,  A NN ixut@9L$DtD$H@s&t&t&|$Hxe[^_]D$u|$4$MM܃|$E䋑4$ET$U|$D$4$UU܃D$ T$uE4$D$}E7e[^_]uD$ |$L$4$OE$E}>t&U܉MU܉NjMAE؋D$u|$4$MEM܉EA Pw%v'|$D$4$ME|$D$4$EE܃D$ D$ED$E$MԋU؋A T$|$D$ 4$E|$D$E܉4$E܃D$ D$j&E$Eut& w{ "  D$$E܉MM|$T$4$E|$D$E \M؃D$$EuD$$EMe MM.    D$$E؉MM|$T$4$E|$D$E:ED$$D$$ &'EЉt$D$$Eԃt$D$EEЉ$EUD$ D$Eԉ$D$Gt$|$D$ EЉ$Eԃt$D$EEЉ$EuD$ D$Eԉ4$D$u&P1t$MƋP\E1PuؐE1PuEE@Vt& 6D$$ȉMMKD$$MZfED$<$,D$EuԋPX<$D$EԃD$ t$D$E$E@EЃ ,  D$$ȉMMd&   ] D$$,t&EU҃ )UM3U }ЃUUD$D$ <$T$Eԃ<$D$Eԃ<$}ЉD$UD$ED$ T$$}Eԃt$D$ D$<$u4$UD$ED$ T$$UD$ED$ T$$uEԃD$ t$D$<$|$vU$Et$ &EzUWVuSd$ԋE4$D$ D$D$U E4$T$D$EU4$}T$E|$D$ D$E$e[^_]UWVSd$ԋu} eED$ D$T$$EEM䍓D$$T$E܉ME܃U|$$UUM؋ET$D$ L$$<$D$D$<$D$D$<$D$D$<$D$D$FFPFP FPFPFPFPF@e[^_]ÍvUWEVǍuSd$$E<$$E̋D$ D$4$D$}ԃ4$|$EԃD$$D$4$L$MEԃ<$D$E̅9EЋEЉ4$D$D$EԍT$EEЉ4$D$ D$E<$D$ D$EԉD$EЉ4$D$D$EԍT$EEЉ4$D$ D$E<$D$ D$EԉD$Ẻ|$$|$4$Eă4$D$D$}Eԃ|$D$ D$E$Eȉ$e[^_]EUVSd$4$t$D$$d$[^] <.$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (BAB CxAAA  H-AB AgA 0lAA AO vA AA0fAA AO PA AA,AB BDH AAA D 8FAC Ar  FAB A CA0@LAA AO vA AA$tlAB BdAA ,AB BD AAA I ,AB BD AAA G ,AB BD AAA G ,,AB CAAA ,\AB BD~ AAA F 0)AB BD AAA I ,AB EC AAA I ,"AB CAAA < AA AAO@  CA AAE <`AA AAO@ CA AAB L AB Cr AAA E  AAA C  AAA D <sAB F AAA H  AAA D ,0AB ED AAA B <`AA AAO@j CA AAE <~AB C AAA F  AAA G )AB AcA ,AB F AAA I ,4AB BDAAA ,dAB C{ AAA D 0AB EF AAA A $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.rel.text._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely._ZN4node10ObjectWrap3RefEv.rel.text._ZN4node10ObjectWrap3RefEv.text.unlikely._ZN4node6Parser16on_message_beginEP11http_parser.rel.text._ZN4node6Parser16on_message_beginEP11http_parser.text.unlikely._ZN4node10ObjectWrapD2Ev.rel.text._ZN4node10ObjectWrapD2Ev.text.unlikely._ZN4node6Parser7on_bodyEP11http_parserPKcj.rel.text._ZN4node6Parser7on_bodyEP11http_parserPKcj.text.unlikely._ZNK4node9StringPtr7compareEPKcjS2_S2_j.isra.5.part.6.text._ZNK4node9StringPtr7compareEPKcjS2_S2_j.isra.5.part.6.text.unlikely._ZN4node10ObjectWrap5UnrefEv.rel.text._ZN4node10ObjectWrap5UnrefEv.text.unlikely._ZN4node10ObjectWrapD0Ev.rel.text._ZN4node10ObjectWrapD0Ev.rodata.str1.1.text.unlikely._ZN4node6Parser6FinishERKN2v89ArgumentsE.rel.text._ZN4node6Parser6FinishERKN2v89ArgumentsE.text.unlikely._ZN4node6Parser5PauseILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.rel.text._ZN4node6Parser5PauseILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.text.unlikely._ZN4node6Parser5PauseILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.rel.text._ZN4node6Parser5PauseILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.text.unlikely._ZN4node6ParserD2Ev.rel.text._ZN4node6ParserD2Ev.rodata.str1.4.text.unlikely._ZN4node6Parser7ExecuteERKN2v89ArgumentsE.rel.text._ZN4node6Parser7ExecuteERKN2v89ArgumentsE.text.unlikely._ZN4node6Parser12ReinitializeERKN2v89ArgumentsE.rel.text._ZN4node6Parser12ReinitializeERKN2v89ArgumentsE.text.unlikely._ZN4node14NodeHttpParser3NewERKN2v89ArgumentsE.rel.text._ZN4node14NodeHttpParser3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6ParserD0Ev.rel.text._ZN4node6ParserD0Ev.text.unlikely._ZN4node6Parser6on_urlEP11http_parserPKcj.rel.text._ZN4node6Parser6on_urlEP11http_parserPKcj.text.unlikely._ZN4node6Parser15on_header_valueEP11http_parserPKcj.rel.text._ZN4node6Parser15on_header_valueEP11http_parserPKcj.text.unlikely._ZNK4node9StringPtr8ToStringEb.rel.text._ZNK4node9StringPtr8ToStringEb.text.unlikely._ZN4node6Parser5FlushEv.rel.text._ZN4node6Parser5FlushEv.text.unlikely._ZN4node6Parser19on_message_completeEP11http_parser.rel.text._ZN4node6Parser19on_message_completeEP11http_parser.text.unlikely._ZN4node6Parser15on_header_fieldEP11http_parserPKcj.rel.text._ZN4node6Parser15on_header_fieldEP11http_parserPKcj.text.unlikely._ZN4node6Parser20on_headers_complete_Ev.rel.text._ZN4node6Parser20on_headers_complete_Ev.rel.rodata._ZN4node6Parser20on_headers_complete_Ev.text.unlikely._ZN4node6Parser19on_headers_completeEP11http_parser.rel.text._ZN4node6Parser19on_headers_completeEP11http_parser.text.unlikely._ZN4node13ExecuteDirectEPNS_7commonsEN2v86HandleINS2_6ObjectEEEPcjjjPi.rel.text._ZN4node13ExecuteDirectEPNS_7commonsEN2v86HandleINS2_6ObjectEEEPcjjjPi.text.unlikely._ZN4node18SetPrototypeMethodIN2v86HandleINS1_16FunctionTemplateEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE.rel.text._ZN4node18SetPrototypeMethodIN2v86HandleINS1_16FunctionTemplateEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE.text.unlikely._ZN4node14NodeHttpParser17InitParserMembersEPNS_7commonsEN2v86HandleINS3_16FunctionTemplateEEE.rel.text._ZN4node14NodeHttpParser17InitParserMembersEPNS_7commonsEN2v86HandleINS3_16FunctionTemplateEEE.text.unlikely._ZN4node14NodeHttpParser10InitializeEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node14NodeHttpParser10InitializeEN2v86HandleINS1_6ObjectEEE.text.unlikely._GLOBAL__sub_I_node_http_parser.cc.rel.text.startup._GLOBAL__sub_I_node_http_parser.cc.rel.init_array.rel.data.rel.ro._ZTVN4node10ObjectWrapE.rel.data.rel.ro._ZTVN4node6ParserE.rel.data.rel.node_http_parser_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group !#$&')*,-F-./1245689;<>?ABCEFHIKLNOQRTUWXZ[]^`acefhiklnoqrtuKFunwy{}}444 494U4|4Am444444444<4L4\4l444|4 4444#-4)4/454;4A4G4M4S4YL4_G4eA4k<4q74w14})4!4444444444t4m4f4_4U4444444UaJaBa:a2a$*a+"a2a9a@ aGaN aU a\acajaqaxaavakaaaaaa`a44444 444%4      "B"f|-"!"$9@f"'Y!yqf"'"*+Dn>[L"/xl"2"6Bs*Z"9 B T "< "? !{ "? "C 4 c    9 J )"Fz I     ""L4 "O^ d "R  "U   s"X "[9 "^m ~"a      1)"fei'"lCo"r6c 8E}node_http_parser.cc_ZNK4node9StringPtr7compareEPKcjS2_S2_j.isra.5.part.6_GLOBAL__sub_I_node_http_parser.cc_ZStL8__ioinit.LC8.LC9.LC10.LC16.LC17.LC18.LC20.LC15.LC19.LC27.LC28.LC29.LC30.LC31.LC32.LC39.LC40.LC43.LC44.LC45.LC46.LC53.LC54.LC47.LC48.LC51.LC52.LC41.LC42.LC33.LC34.LC35.LC36.LC37.LC38.LC49.LC50.LC71.LC70.LC69.LC68.LC67.LC66.LC65.LC64.LC63.LC62.LC61.LC60.LC59.LC85.LC79.LC78.LC77.LC76.LC75.LC74.LC73.LC72.LC83.LC82.LC81.LC80.LC84.LC86.L1225.L1227.L1228.L1229.L1230.L1231.L1232.L1233.L1234.L1235.L1236.L1237.L1238.L1239.L1240.L1241.L1242.L1243.L1244.L1245.L1246.L1247.L1248.L1249.L1250.L1251.L1252.LC89.LC92.LC93.LC94.LC95.LC96.LC98.LC99.LC100_ZN4node10ObjectWrapD5Ev_ZN4node6ParserD5Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN4node6Parser16on_message_beginEP11http_parser_ZdaPv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN4node6Parser7on_bodyEP11http_parserPKcj_ZNK2v85Value8ToObjectEv_ZNK2v85Value8ToStringEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZNK2v85Value10IsFunctionEv_ZN2v86Object3HasENS_6HandleINS_6StringEEE_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZN2v87Isolate10GetCurrentEv_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD0Ev_ZdlPv_ZN4node6Parser6FinishERKN2v89ArgumentsE_ZN2v86Object31SlowGetPointerFromInternalFieldEihttp_parser_execute_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeEhttp_errno_name_ZN4node6Parser5PauseILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEihttp_parser_pause_ZN4node6Parser5PauseILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN4node6ParserD2Ev_ZTVN4node6ParserE_ZN4node6ParserD1Ev_ZN4node6Parser7ExecuteERKN2v89ArgumentsE_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZNK2v85Value10Int32ValueEvhttp_parser_init_ZN4node6Parser12ReinitializeERKN2v89ArgumentsE_ZN4node14NodeHttpParser3NewERKN2v89ArgumentsE_ZNK2v85Value12IntegerValueEv_ZNK2v85Value12BooleanValueEv_Znwj_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN4node6ParserD0Ev_ZN4node6Parser6on_urlEP11http_parserPKcj_Znaj_ZN4node6Parser15on_header_valueEP11http_parserPKcj_ZNK4node9StringPtr8ToStringEb_ZN2v85Array3NewEPNS_7IsolateEi_ZN2v86String5EmptyEv_ZN4node6Parser5FlushEv_ZN4node6Parser19on_message_completeEP11http_parser_ZN4node6Parser15on_header_fieldEP11http_parserPKcj_ZN4node6Parser20on_headers_complete_Ev_ZN2v86Object3NewEvhttp_should_keep_alive_ZN2v84TrueEv_ZNK2v85Value6IsTrueEv_ZN2v85FalseEv_ZN2v811HandleScope12CreateHandleEPNS_8internal10HeapObjectE_ZN4node6Parser19on_headers_completeEP11http_parser_ZN4node13ExecuteDirectEPNS_7commonsEN2v86HandleINS2_6ObjectEEEPcjjjPi_ZN2v89Exception10RangeErrorENS_6HandleINS_6StringEEE_ZN4node7commons15max_header_sizeE_ZN2v84NullEv_ZN2v86Number3NewEd_ZN4node18SetPrototypeMethodIN2v86HandleINS1_16FunctionTemplateEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node14NodeHttpParser17InitParserMembersEPNS_7commonsEN2v86HandleINS3_16FunctionTemplateEEE_ZN4node14NodeHttpParser10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_http_parser_module !5 " O 0KZ  Gi"1P~?X 5@ .IX`  "O M)>^n N O ,o  '/Zmx  '/Zmx E   $,Mco| P"4 Q 5CUc RMs S;R T_ U 1F N[ O1\  '/Vg T r  !)1Tjy T"0bq Y~+? V\oz E  ^  e  b V! W/B XN YYl Zv [.R~?1Nw \ ]' ^6 _AP `\ ag \ ]) b8 cF d e ^ _ ` a<^ fm g{ b c d e#B hQ i\ f g j k l m  n( o3 N p] qk  h i  V W  X Y  Z [* E jT kb u l m  n o  p q   J fAo7W{/O !WQ" `1 a> Z [ O o  |    ^ _ % `1 a; { g  d e  X Y + Z: [D w l m  n o  n# o07 gA` qi p h iD pS q]  %4c|  KY; VJ W^u X Y Z [ \" ]6 ^" _3J `X ai b c  d e-` fo g h i j k*A lO m`w n o p q Dj fp/S8 XG YTX 6B lQ m^t n o7_$Ef,<Tq% ; Q q     V' W1 D XP YZ m Zw [     1 U    ^ _! 7 `C aM     \ ] E \T ]^  r  s t  u v w$ x, y4 z< {D |L }W ~b m x            D dS e` ^ _ `  a g b c(a dp ez h i g" - p< qId hs i} Z [ j k l m! n- o7O p^ qh       $ ( , 0 4 8 < @ D H L P T X \ ` d h    "Xtr S; Qh6L[ P RB!  N"@I Oj  3#S$h%& %G#V p$%& " " " "%0 <HT`l $,4=Y#k)* $+ &&=F g&',$  I-( .2/:0B    ( Lp  Dx0`!#%'$)d+-/41d358:8<h>@BJ'4 '@ 'L 'X'l 'x ' ' ' '' ' ' ' ' ' ' ' '', '8 "'D ('P'X'`h!h'h,hpB @ - @ !`\ @8$|f @P0'  @*QF L @((/%<Q@lM @P82p2?   @6 D @ @XX9b p  @X<8B_` [ @P?y2|` @XC8)4 @(Fn    @ȪI "  @XL&c_ @ O   @ (R$F$ B @HxUk//s  @XSA`A @P[5 `B| `Bx @ز^ PK `K~ @Xxa# ^l @йcS L_ P_) @f y_. _* @hi{ =e @e @(0lv e e @XoM rg g @8r iiF @8uQiM @@wai] @H yi @h {j @}$j$j0(j( PjPj @Pp.  ]node_zlib.o/ 1560953078 501 20 100644 30964 ` ELF k4(YV#$)*,-23>?ABIKQUWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]UWVSd$t$0F0Hwjuu_d$[^_]ÍF~<$l$(D$FuӋFt̋VD$<$T$Ft1uF뤍vFl$(D$F$F놐t&F<$D$FjUVSd$t$ nu(l$t$D$F$F$d$[^]Bad argumentMissing dictionaryBad dictionaryZlib erroronerrorcallbackFailed to reset streamFailed to set dictionaryInit error1.2.3DEFLATEINFLATEGZIPGUNZIPDEFLATERAWINFLATERAWUNZIPZlibwriteinitcloseresetZ_NO_FLUSHZ_PARTIAL_FLUSHZ_SYNC_FLUSHZ_FULL_FLUSHZ_FINISHZ_BLOCKZ_OKZ_STREAM_ENDZ_NEED_DICTZ_ERRNOZ_STREAM_ERRORZ_DATA_ERRORZ_MEM_ERRORZ_BUF_ERRORZ_VERSION_ERRORZ_NO_COMPRESSIONZ_BEST_SPEEDZ_BEST_COMPRESSIONZ_DEFAULT_COMPRESSIONZ_FILTEREDZ_HUFFMAN_ONLYZ_RLEZ_FIXEDZ_DEFAULT_STRATEGYZLIB_VERNUMZLIB_VERSION../src/wrappers/node_zlib.ccnode_zlibUWVuSd$ĉ4$} 4$$x WM~G$uv}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ4$D$M4$Ee[^_]fGGUԉỦ$@&GMȃD$Ẻ$Eԃ$EMȉ@@MG @1GHGLGPGTGXG\G`GdGhGlGmt $G$|$D$|$D$G$G$E"Eԉ$Uԃ1t $D$4$U}̍D$ED$ <$D$Eԃ<$D$Eԃ<$D$5Eԉ$EEԃcUVSd$t$ @Ft2$D$D$F$Ft$4$d$[^]UWEVSd$$} E4$$OxEMtQEĉ$Uă1t $D$E$ME$Ee[^_]t&GPJyD$$ƋFl4$PGYGUĉU$E}Gv<cWURуJyrR UU׃EUGD$E$EăEG$EG$}EE<$D$Eă$MEUFENMFdV VhND$ D$FpD$E$F<$D$EăD$E$UGvr yFxDvdt&E$UăGуKGEED$E$EăEG$EG $EED$E$Eă$EEG-E$EăEĉ$EEă&E$Eă)fE$EăfJyl &E$EăfE$EăfE$EăUVSd$t$ ~l@tWFm@Ft2$D$D$F$Ft$d$[^]Í&Fmƒt_tZPt2v*F\džj$F\VF$$뽍&F$$UVSd$t$ ~l@t_Fm@Ft2$D$D$F$Ft$4$d$[^]Í&Fmƒt_tZPt2v*F\džb$F\NF$$뽍&F$$UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE @PJytVD$$ǀltUGmEԉ$Uԃ1t $D$4$}냍vR tpBxuozluGmt]tXHtpvhG\LJl$G\X&@l &G$$럍&G$$|UWEVSd$$uE<$$^NLy N}<$UL$EEEED$N<$L$EMD$MN<$L$FMED$ M؋M<$D$M܍L$E؉D$EUD$D$ E<$T$D$FV$P ~~FF0ƒi`PFF0G$F3f?FVҍDЍE؉$ljUE<$$UEF}<$MD$UEUD$ EE<$T$D$UU*F<$D$UED$ UčD$<$T$UEMT$UD$D$L$<$T$ ~F~u2E$E$e[^_]Ít&VFF0ƒt:t5Ptev]FF0t$F넍F$$&FV$P C&F$$늍&EUҍvF$$t&UEMUE&F$$\UWVuSd$4$4$$xtJE$U1t $D$4$M4$Ee[^_]vE @PJyD$$NjGXEEO\tGXE$U1t $D$4$},t&R tBxszNvDhG$EGXUUOO(DȍE؉$MEE$$‹MEMEEG $UD$UMEUUL$D$ $T$EE*GXED$$EUD$ EčD$ET$$EUD$ET$UD$ ED$T$$lfGlmE$X t&G$EGXfG`L$D$G$EGXO(DȍE؉$MEE$$‹M}EGUMD$E$MED$ MM$L$ML$EE*GXED$$EMD$ EčD$EL$$ED$EMUD$ ED$L$T$$lGlmu}E$t&Gm HG\LJ$G\ GmtgtbHG\LJ8$G\$<$P v<$P vE$$띍&E$$t&E$$t&E$$:t&MEUME&MEUMEsUWEVS$t$u E<$$NjFEtOE$U1t $D$E$ME$Ee[^_]fFPJyD$$VE%FMM$E~VF$E~#F$E~F $E}EEEuM@0pHHLuM@4@8pP@d@XHTPwEXLEEHwwjtd}D$8D$GTD$GPD$GLD$D$ GHD$$GX$@ EPXZMEuɉH\@l@ p`t@XQHE$U1t $D$E$}B PzU@҉EE$EEE$EfE$EfE$EfUEat&uD$ 8D$FLD$$FX$(vx(u؉4$D4$$-EEM@D$E$U|$}ET$D$ <$EUEU*@X<$D$UD$ <$UčT$UT$UEMT$UD$D$L$<$T$ ExlE@lxmd4$&~fF|$$G~*F}D$<$u<$}t$E$$ljEt$uE4$E$Ƌ}1t ft&EU BL&UMQL&EuD$ED$$EFX~(u؉4$D4$$EEM@D$E$M|$}EL$D$ <$EUEU*@X<$D$UMD$ UčL$<$T$UEMT$UD$D$L$<$T$ ExliE@lxm4$kv@mƒypPD8Eǀ@\D$E@\-@mƒPEǀ@\($E@\<Qt&E$EfE$Ef $P D‹$P E$$?ABDEFE*OGIKMOPQST9>BD J:P/V \Kbbhn{tPzPPP P(P0P &+8D"8P(L.@P4[:HP@hFPPLtRXPX^dj`Ppv|hPR    B"Q1G_w-"f"!IKf"d"L")[! @o!K$7ol"$'>"3_m"*"* "-0Fh6  2 M _ 9v    ! ' <y   "?Q   3 % "Bl    1 I V n { Mnode_zlib.cc_GLOBAL__sub_I_node_zlib.cc_ZStL8__ioinit.LC5.LC16.LC13.LC15.LC14.LC12.LC18.LC19.LC22.LC21.LC24.LC25.LC26.LC27.LC28.LC29.LC30.LC31.LC32.LC33.LC34.LC35.LC36.LC37.LC40.LC41.LC42.LC43.LC44.LC46.LC47.LC48.LC49.LC50.LC51.LC52.LC53.LC54.LC56.LC57.LC58.LC59.LC60.LC61.LC62.LC63.LC64.LC65.LC66.LC67.LC68.LC69.LC70.LC71.LC72.LC73.LC74.LC75.LC76.LC77.LC78.LC79_ZN4node10ObjectWrapD5Ev_ZN4node4ZCtxD5Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN4node4ZCtx7ProcessEP9uv_work_sMOZ_Z_inflateMOZ_Z_inflateSetDictionaryMOZ_Z_deflate_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN4node8NodeZlib3NewERKN2v89ArgumentsE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZNK2v85Value7IsInt32Ev_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZNK2v85Value10Int32ValueEv_ZNK2v85Value8ToObjectEv_Znwj_ZTVN4node4ZCtxE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN4node10ObjectWrapD0Ev_ZdlPv_ZN4node8NodeZlib5WriteERKN2v89ArgumentsE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZNK2v85Value11Uint32ValueEv_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN4node4ZCtx5AfterEP9uv_work_siuv_queue_work_ZN4node4ZCtxD2Ev_ZN2v87Isolate10GetCurrentEv_ZdaPvMOZ_Z_inflateEnd_ZN2v82V837AdjustAmountOfExternalAllocatedMemoryEiMOZ_Z_deflateEnd_ZN4node4ZCtxD1Ev_ZN4node4ZCtxD0Ev_ZN4node8NodeZlib5CloseERKN2v89ArgumentsE_ZN2v87Integer3NewEiPNS_7IsolateE_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN2v86Number3NewEd_ZN4node8NodeZlib5ResetERKN2v89ArgumentsEMOZ_Z_deflateResetMOZ_Z_inflateResetMOZ_Z_deflateSetDictionary_ZN4node8NodeZlib4InitERKN2v89ArgumentsEMOZ_Z_deflateInit2_MOZ_Z_inflateInit2__ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_Znaj_ZN4node8NodeZlib22DefinePrivateConstantsEPNS_7commonsEN2v86HandleINS3_6ObjectEEE_ZN2v86String9NewSymbolEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node18SetPrototypeMethodIN2v85LocalINS1_16FunctionTemplateEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node8NodeZlib10InitializeEN2v86HandleINS1_6ObjectEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_zlib_module !5 " 0KZ Rt 5@  '/R\ 5z#<% 5@Rr .IX`  $,4NdsWx'g :Wo /C^m  /C^mu  $,=S_lI  $,4u 6B 76Rl 8| 95O[ :  $,=S_l ".{ ;:T 8g </:Bp 8:M7CWcw  '/7Pfu* =-/Gm = >>X 8h$2?Q_ <!Ls 8'|/G $  ' ?8A @[| A B C D08 EFO Fi G H I J>F KTc Lw  3Sh  $/7@\q M N O  P*0: QIaj R S" T<]u~ U V G+4 WNo X Y'?H Zb [ \ ]9A ^OX _r ` a b  c&GO d]f e f g8Ya hox i j'0 kJk l m # ; D n^    o   p  q 5 D M =e n r         0( 2:)    Lp  Hp(\!#%'P)x24 W@ WLWs` Wl WxWt W W WWWW!',B @Z W - @ZWNHPfD @Z0Wg @Z0WL @[(W2R&.a0] @D[W!l @$\8W$,0 @\\W'G l h @l]hW*2 @  @]pW-Z` @D^W0.b ^ @^8W3<@ @`W6*20_ . @aPW9a## @d0W<B&P& @4e0W?%&q&% m @dexWB2 2F @i8WE h2  @jWGp2 @j WIF2B @: @  @O ` /40 1560953079 501 20 100644 35384 ` ELFP4(O_RDONLYO_WRONLYO_RDWRS_IFMTS_IFREGS_IFDIRS_IFCHRS_IFBLKS_IFIFOS_IFLNKS_IFSOCKO_CREATO_EXCLO_NOCTTYO_TRUNCO_APPENDO_DIRECTORYO_NOFOLLOWO_SYNCO_DIRECTO_NONBLOCKS_IRWXUS_IRUSRS_IWUSRS_IXUSRS_IRWXGS_IRGRPS_IWGRPS_IXGRPS_IRWXOS_IROTHS_IWOTHS_IXOTHE2BIGEACCESEADDRINUSEEADDRNOTAVAILEAFNOSUPPORTEAGAINEALREADYEBADFEBADMSGEBUSYECANCELEDECHILDECONNABORTEDECONNREFUSEDECONNRESETEDEADLKEDESTADDRREQEDOMEDQUOTEEXISTEFAULTEFBIGEHOSTUNREACHEIDRMEILSEQEINPROGRESSEINTREINVALEIOEISCONNEISDIRELOOPEMFILEEMLINKEMSGSIZEEMULTIHOPENAMETOOLONGENETDOWNENETRESETENETUNREACHENFILEENOBUFSENODATAENODEVENOENTENOEXECENOLCKENOLINKENOMEMENOMSGENOPROTOOPTENOSPCENOSRENOSTRENOSYSENOTCONNENOTDIRENOTEMPTYENOTSOCKENOTSUPENOTTYENXIOEOPNOTSUPPEOVERFLOWEPERMEPIPEEPROTOEPROTONOSUPPORTEPROTOTYPEERANGEEROFSESPIPEESRCHESTALEETIMEETIMEDOUTETXTBSYEWOULDBLOCKEXDEVSIGHUPSIGINTSIGQUITSIGILLSIGTRAPSIGABRTSIGIOTSIGBUSSIGFPESIGKILLSIGUSR1SIGSEGVSIGUSR2SIGPIPESIGALRMSIGTERMSIGCHLDSIGSTKFLTSIGCONTSIGSTOPSIGTSTPSIGTTINSIGTTOUSIGURGSIGXCPUSIGXFSZSIGVTALRMSIGPROFSIGWINCHSIGIOSIGPOLLSIGPWRSIGSYSSIGUNUSEDSSL_OP_ALLSSL_OP_CISCO_ANYCONNECTSSL_OP_COOKIE_EXCHANGESSL_OP_CRYPTOPRO_TLSEXT_BUGSSL_OP_EPHEMERAL_RSASSL_OP_LEGACY_SERVER_CONNECTSSL_OP_MICROSOFT_SESS_ID_BUGSSL_OP_MSIE_SSLV2_RSA_PADDINGSSL_OP_NETSCAPE_CA_DN_BUGSSL_OP_NETSCAPE_CHALLENGE_BUGSSL_OP_NO_COMPRESSIONSSL_OP_NO_QUERY_MTUSSL_OP_NO_SSLv2SSL_OP_NO_SSLv3SSL_OP_NO_TICKETSSL_OP_NO_TLSv1SSL_OP_NO_TLSv1_1SSL_OP_NO_TLSv1_2SSL_OP_PKCS1_CHECK_1SSL_OP_PKCS1_CHECK_2SSL_OP_SINGLE_DH_USESSL_OP_SINGLE_ECDH_USESSL_OP_TLS_BLOCK_PADDING_BUGSSL_OP_TLS_D5_BUGSSL_OP_TLS_ROLLBACK_BUGNPN_ENABLEDRSA_PKCS1_PADDINGRSA_PKCS1_OAEP_PADDINGRSA_NO_PADDINGPOINT_CONVERSION_COMPRESSEDPOINT_CONVERSION_UNCOMPRESSEDPOINT_CONVERSION_HYBRIDSSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONSSL_OP_CIPHER_SERVER_PREFERENCESSL_OP_DONT_INSERT_EMPTY_FRAGMENTSSSL_OP_MICROSOFT_BIG_SSLV3_BUFFERSSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUGSSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUGSSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONSSL_OP_SSLEAY_080_CLIENT_DH_BUGSSL_OP_SSLREF2_REUSE_CERT_TYPE_BUGUWEVSd$ĉ$uE<$$ CD$}D$<$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$P@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$`@EԍUȃT$<$D$EẼ4$D$ D$EԉD$<$D$D$p@Eԃ<$D$L$EẼ4$D$ D$EԉD$<$D$D$@EԍL$<$D$EẼ4$D$ D$EԉD$<$D$EԍL$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍL$<$D$EẼ4$D$ D$EԉD$<$D$D$`@UȃEԉ<$T$D$EẼ4$D$ D$EԉD$<$D$D$AEԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$p@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$`@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$P@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$0@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$ @EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$*@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$&@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$"@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$0@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$Eԃ<$D$T$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$1@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$,@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$;@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$6@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$5@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$8@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$7@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$3@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$ @Eԃ<$D$T$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$(@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$<@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$4@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$W@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$9@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$W@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$>@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$=@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$:@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$&@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$2@Eԃ<$D$T$EẼ4$D$ D$EԉD$<$D$D$?EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$ @EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$"@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$&@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$(@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$*@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$,@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$1@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$0@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$2@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$3@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$4@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$5@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$6@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$7@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$8@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$9@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$:@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$;@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$<@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$=@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$=@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$>@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?@Eԃ<$D$T$EẼ4$D$ D$EԉD$<$D$D$?@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$ @EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$AEԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$`@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@Eԃ<$D$T$EẼ4$D$ D$EԉD$<$D$D$p@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$?EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$<$D$D$@EԍT$<$D$EẼ4$D$ D$EԉD$EЉ$e[^_]fּUVSd$4$t$D$$d$[^]@@@@@0A|@L@X@X@@X@\@R@@_@Y@[@Z@A@@V@@@^@@\@E@U@\@Z@D@V@R@B@Y@Y@@Y@@Z@N@B@P@E@W@O@N@C@Z@C@V@R@Q@@W@V@A@]@O@[@.@AAPAAAApAAAAA0A A`A$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0jCAB ECOC AAA C $PFAB B~AA x.symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.rodata.str1.4.text.unlikely._ZN4node15DefineConstantsEN2v86HandleINS0_6ObjectEEE.rel.text._ZN4node15DefineConstantsEN2v86HandleINS0_6ObjectEEE.text.unlikely._GLOBAL__sub_I_node_constants.cc.rel.text.startup._GLOBAL__sub_I_node_constants.cc.rel.init_array.bss._ZStL8__ioinit.rodata.cst8.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group  F 4 CH MRW\ a(g0ms8y@HPYahq y(08 !'- 39?@E!KHQ,WP]:cGiXoNuW{`]ehkup|x ")07>EL SZ ahov"})09CPYcov~  %,3(:A0HOV8]d@krHyPX` h$.4p:xA Q\!c(i/p6=vDK}RY`gnu| !)3;CKS[$b+j2r9|@GNU\cjqx,L p;Xv  '.5<C JQX_+f=mRt{g|4:XjC 6Ld&>[snode_constants.cc_GLOBAL__sub_I_node_constants.cc_ZStL8__ioinit.LC1.LC3.LC5.LC6.LC7.LC9.LC11.LC13.LC14.LC15.LC17.LC18.LC19.LC20.LC21.LC23.LC25.LC27.LC29.LC30.LC31.LC33.LC35.LC36.LC37.LC38.LC40.LC41.LC42.LC43.LC44.LC45.LC46.LC47.LC49.LC51.LC53.LC55.LC57.LC58.LC59.LC60.LC62.LC63.LC64.LC65.LC66.LC67.LC68.LC70.LC71.LC72.LC74.LC75.LC76.LC77.LC78.LC79.LC81.LC82.LC83.LC84.LC85.LC86.LC87.LC88.LC89.LC90.LC91.LC92.LC93.LC94.LC95.LC97.LC99.LC101.LC102.LC103.LC104.LC105.LC106.LC107.LC108.LC109.LC110.LC112.LC114.LC115.LC116.LC118.LC119.LC120.LC122.LC124.LC125.LC126.LC127.LC128.LC129.LC130.LC131.LC132.LC133.LC134.LC135.LC136.LC138.LC139.LC140.LC141.LC142.LC144.LC145.LC146.LC147.LC148.LC149.LC150.LC152.LC153.LC154.LC155.LC156.LC158.LC159.LC160.LC161.LC162.LC163.LC164.LC165.LC166.LC168.LC169.LC170.LC171.LC172.LC174.LC176.LC178.LC179.LC180.LC181.LC182.LC183.LC184.LC185.LC186.LC187.LC188.LC189.LC190.LC191.LC193.LC195.LC197.LC198.LC199.LC200.LC201.LC202.LC203.LC205.LC206.LC208.LC209.LC210.LC211.LC212.LC213.LC214.LC215.LC216.LC217.LC218.LC219.LC220.LC221.LC222.LC223.LC224.LC225.LC226.LC227.LC228.LC229.LC230.LC231.LC232.LC233.LC234.LC235.LC236.LC237.LC238.LC239.LC240.LC241.LC242.LC243.LC244.LC245.LC246.LC247.LC248.LC249.LC250.LC251.LC252.LC253.LC254.LC255.LC256.LC257.LC258.LC259.LC260.LC261.LC262.LC263.LC264.LC265.LC266.LC267.LC268.LC269.LC270.LC271.LC272.LC273.LC274.LC275.LC276.LC277.LC278.LC279.LC280.LC281.LC282.LC283.LC284.LC285.LC286.LC287.LC288.LC289.LC290.LC291.LC292.LC293.LC294.LC295.LC296.LC297.LC298_ZN4node15DefineConstantsEN2v86HandleINS0_6ObjectEEE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v86Number3NewEd_ZN2v86String9NewSymbolEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v811HandleScopeD1Ev_ZN2v87Isolate10GetCurrentEv_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit  $,4W` z  2S[ ir   !* De}   3< Vw    ! +CL "f #  $!BZc %} & ' (3Tl )  *( +Bc{ , -# .1: /Tu 0 1 - E N 2h   3  4    5 ? W ` 6z    7    82 S k t 9    :  # , ;F g   <    =  ' >5 > ?X y  @  A   B  C -EN Dh E F G?G HU^ Ix J K  L.Ogp M N O  P$ Q>_g Ru~ S T U V)2 WLmu X Y Z [!9B \\} ] ^5= _KT `n a b c d"CK eYb f| g h4Umv i j k #, lFgo m} n o5> pXy q r s t -5 uCL vf w x y z;C {QZ |t } ~ *KS aj  " <]u    )2 Lm   #+ 9B \}   3; IR l    A Y b |      !! 0!Q!i!r! !!!! ! "!"*" D"e"}"" """ "" "#3#<# V#w### ### ## $-$5$ C$L$ f$$$ $$ $$$ $% %;%S%\% v%%%% %% && .&O&W& e&n& &&& && &' ' '"' <']'u'~' '''' '(-(<( P(q((( (((( )))A)J) d)))) )))* *=*U*^* x**** ** ++ 0+Q+i+r+ ++++ + ,!,*, D,e,},, ,,,, ,-5->- X-y--- --- -- ./.G.P. j.... .../ "/C/[/d/ ~//// //00 60W0o0x0 0000 01'101 J1k111 1111 2#2;2D2 ^2222 2222 373O3X3 r3333 3344 *4K4c4l4 444 44 45 5 5 5 :5[5c5 q5z5 5555 56)626 L6m6u6 66 6666 7#7;7D7 ^7777 7777 878O8X8 r8888 888 99 (9I9a9j9 999 99 99: : ::[:s:|: :::: :;+;4; N;o;w; ;; ;;; ;; <#<;<D< ^<<< << <<< << =3=;= I=R= l==== ==> > $>E>M> [>d> ~>>> >> >>?? 4?U?m?v? ???? ? @%@.@ H@i@q@ @@ @@@@ @A7A@A ZA{AAA AAAA B3BKBTB nBBBB BBC C &CGCRCaC  ( 2!:" T |4<!<'<,2<p;2WJ  jC @(lzLLF @8 4L0 @0 @LTL aN}0N(OO @8OPQ0 c/58 1560953078 501 20 100644 4064 ` ELF 4(node_%sUWVS$T$8JtnD$ D$D$ D$$$D$0tEx 7t7D$D$F$u$[^_]fxXuf$1[^_]UVSd$4$t$D$$d$[^]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| PAA AARs AA AAC WCA AA$pFAB B~AA .symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.text.unlikely._ZN4node18get_builtin_moduleEPKc.rel.text._ZN4node18get_builtin_moduleEPKc.text.unlikely._GLOBAL__sub_I_node_extensions.cc.rel.text.startup._GLOBAL__sub_I_node_extensions.cc.rel.init_array.bss._ZN4nodeL12EMPTY_MODULEE.rel.data.rel.node_module_list.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group  -F O ^cX.ASbz,AVlnode_extensions.cc_ZN4nodeL12EMPTY_MODULEE_GLOBAL__sub_I_node_extensions.cc_ZStL8__ioinit.LC0_ZN4node18get_builtin_moduleEPKc__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_snprintfnode_module_liststrcmp_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_buffer_modulenode_crypto_modulenode_evals_modulenode_fs_modulenode_http_parser_modulenode_os_modulenode_zlib_modulenode_jxtimers_wrap_modulenode_jxutils_wrap_modulenode_memory_wrap_modulenode_thread_wrap_modulenode_module_wrap_modulenode_timer_wrap_modulenode_tcp_wrap_modulenode_udp_wrap_modulenode_pipe_wrap_modulenode_cares_wrap_modulenode_tty_wrap_modulenode_process_wrap_modulenode_fs_event_wrap_modulenode_signal_wrap_module ( KQx   ( 2:  !"# $%&'( )$*(+,,0-4.8/<0@1D2H3L4P5 t 4<!<'<,2<;DoPk @ 8F @ 8 H @   L-X@) @ H\x0( @ T` /77 1560953085 501 20 100644 904372 ` ELF 4(!"$%'(*+|UWVSd$D$0tm1! tD$ €D$4|$D֍q$D҃)l$(L$d$[^_]Íl$(_jx_argvconfigleaf() == x->leaf()../src/jx/btree.hparent() == src->parent()src->count() >= count()to_move >= 1to_move <= src->count()parent() == dest->parent()count() >= dest->count()to_move <= count()dest->count() == 0count() >= 1i <= count()iter.node == root()jxcore_jx_markerexports.mark='';_jx_subs_jx_memStore_jx_tasks_jx_utils_jx_install_jx_multiplier_jx_monitor_jx_monitorHelper_jx_loadEmbedded_jx_http_helper_jx_config_jx_incoming_jx_package_jx_parsers_jx_timers_jx_sourcenode_debugger_linklistassertbufferchild_processconsoleconstantscryptoclusterdgramdnsdomaineventsfreelistfshttphttpsmodulenetospathpunycodequerystringreadlinereplstream_stream_readable_stream_writable_stream_duplex_stream_transform_stream_passthroughstring_decodersystimerstlsttyurlutilvmzlibsqlite3UWEVSd$$E<$$E̍}E2;uttEЍ}D$ <$D$ẺUĉD$UăEԋJEȋẺL$ t$<$D$UEȃMD$ D$EL$$UЋB EЅtPuй)ȅtԋEЀ8_MxjCxx9B EЅut&E$e[^_]EUWVSd$ċ|$Tt$P8On9}PDmDQ @ @O9|n9}:ITI & B Bn9|O9Ll$KLmFWLt$P։|$TljL$ t$l$H<$ F VoOGWnN;|$ű|$Tt$POF9}tt$P@|$TlT$ v 9}>Ur;t$tꋋJL$T I9|‹t$Pʋ|$TF9|$TIlD$vF 9}bEH;L$t拻pxȉl$D$/D$l$H $T$T$l$F 9||$T>D$HD$U9荮D$9 D$3D$ooPooootjo(o(((tEo8o888t oHoHHH9 l$L$P;T$Q 9D$l$l$| 1t&zV9~1'rO9ȉ~FVGd$<[^_]ÍWfx|$xD$fJyɉzl$T$/T$l$H4$D$D$Tl$HD$L$D$t$P2HpJ9ut$Pl$HD$ D$D$$position() + 1 == src->position()i + to_move <= src->max_count()position() + 1 == dest->position()child(count() + i + 1) != NULLnode->count() == node->max_count()node->max_count() - node->count() == to_movenode->count() < node->max_count()*mutable_rightmost() == parent->child(0)throw new Error('jxcore is a global variable');UWVSd$ċt$Tl$PF9E-EV9VE9|$Xt9T$X<1ҋ|$XI &EЃ@L@ 9@uEl$@E|E|$@Dl$H$D$D$OPhT$WHPD$ol$GD$XD@|E@El$H|$D$D$D$|$XOPhT$WHPD$ol$G~~`t$T&Ul$|$ D$Rtl$H4$GWNFD$nVOo;D$Xl$ut$TN9L$X}nL$XFt$Tl$PI|ΐ|$l$H$D$ D$WH hL$OPHL$oOL$TI9|l$Pt$Tl$P 9|$X|WN)IDP;tߋHÍD$/l$H$D$9|$X}l$P1|$X}ML9jJuF;D$Xx^F;D$X|wD$XL$Xl$P1n<9|SGwDŽ~)9}ɋl$PD$XE(Fd$<[^_]ÐHih l$HD$ D$D$#$l$HD$ D$D$$l$HD$ D$D$$l$HD$ D$D$$l$HD$ D$D$$l$HD$ D$D$$UWVSd$ċl$Tt$PE9FFU9 VE9L$XL9T$X1ҍO |$X &EЃ@L@ 9@uMAtt$PIL$XDl$Tƍ I|Ol$HL$N $ T$ WNG VT$n F Oo ut$Pl$TFl$@F|D$X|$D@Dl$H$D$D$WHhL$OPHD$ol$HGF+D$X@|F@F|$D$D$D$WHhL$OPHD$ol$GF+D$X@DP;|$X}l$Tf ;t$XBl$H|$T$+D$X@D$D$D$WHhL$OPT$HD$oGB+D$X@DHL$;{h[D$/l$HD$D$ T$$T$;t$X;vl$Tր>Mt$Pt$XL$Xt&Jj@9uD$Xt$PVD$+T$XHTL$d1&T=TBJUt=Dq9~ȍd$L[^_]Í&U9t(UD$dPHyxffD$d1@cHD$,l$l$X$D$l$tBHxl$D$3D$l$X$l$W|$(pNH뻋Hqppl$XD$ D$D$}$l$XD$ D$D$$l$XD$ D$D$k$l$XD$ D$D$]$UWVSd$t$dAD$:AD$`y;iPD$$@T$D$ 9+D$9V҃T$(|$(N9F~D$l$XD$D$$L$$D$Qy)9~)Dž~ A8AD$-D$ D$$T$;T$ r&GD$9D$:G:9l$Xua$L@@@xVD$D$T$$D$VI9~ )ʃVd$L[^_]Í$@@@xVD$D$T$$D$`D$:9uLuPD$(@T$ D$$9)1҃~ƒT$,|$,OD$)9F~D$ ;D$$D$(l$XT$ $D$FQ9~)ЃFD$(PA9D$GD$ D$$t&L9v9l$X$TNjD$`@GGLGG@PD$`@xD$`89Ll$]&1 |$$W>DFl$XD$ D$D$$D$[D$ D$$D$&D$ D$$UWVSd$ċL$\9L$XD$TD$,@D$ &'|$PȉL$(D$XL$ T$,t$$vDxT$$9Fl$l$HL$(u(T$$;|$ x t,;L$XuD$Xd$<[^_]Í&yFD$Xېt&9T$Xtv|$PЉT$(D$XT$ l$,t$$vDxl$l$H$9FωL$T$(u(l$$;|$ x t,;T$XuD$Xd$< @[^_]fyFD$Xېt&9l$XtpT$ &'L$PT$ D$Xl$$l$HDp$9FʋT$,L$T$T$ l$$uP9xNt9l$XuD$X @\D$`l$H|$ D$D$XD$D$TD$D$P$ @ÐyGD$XUWVSd$D$|D$8D$8Ht&'D$xD$,D$<@D$(&D$,|$8T$(L$4ȋL$<t$0vDxL$$9Fl$l$hL$4LT$0;|$(Dtl;L$,uʁ?@D$88u&D$8D$8HuWL|L~5H*tD$E$~P4 $ED$ Pt $D$PUE $D$AtvPt $D$HQP1 Prp#PrpIPrprPrpPrp1111UVSd$4$t$D$$d$[^]void btree::btree_node::insert_value(int, const value_type&) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree_node::value_type = std::pair, node::MAP_HOST_DATA>]void btree::btree_node::split(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::rebalance_left_to_right(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree_node::rebalance_right_to_left(btree::btree_node*, int) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]void btree::btree::rebalance_or_split(btree::btree::iterator*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::iterator = btree::btree_iterator, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >, std::pair, node::MAP_HOST_DATA>&, std::pair, node::MAP_HOST_DATA>*>; typename Params::pointer = std::pair, node::MAP_HOST_DATA>*; typename Params::reference = std::pair, node::MAP_HOST_DATA>&]void btree::btree_node::swap(btree::btree_node*) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>]btree::btree::iterator btree::btree::internal_insert(btree::btree::iterator, const value_type&) [with Params = btree::btree_map_params, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256>; btree::btree::iterator = btree::btree_iterator, node::MAP_HOST_DATA, std::less >, std::allocator, node::MAP_HOST_DATA> >, 256> >, std::pair, node::MAP_HOST_DATA>&, std::pair, node::MAP_HOST_DATA>*>; typename Params::pointer = std::pair, node::MAP_HOST_DATA>*; typename Params::reference = std::pair, node::MAP_HOST_DATA>&; btree::btree::value_type = std::pair, node::MAP_HOST_DATA>]m"9&%B>$O0Y}.c!oH~?3HA8<+#S*m8@wJdJQ2>Y'_KcjDq6z}H! =5<4rQl 8c,0?+/76ߧ: >[RB>GJ-OD # Do not edit. Generated by the configure script. { 'target_defaults': { 'cflags': [], 'default_configuration': 'Release', 'defines': [], 'include_dirs': [], 'libraries': []}, 'variables': { 'OS': 'android', 'android_ndk_root': '/Users/MOHUS/android-ndk-r15c', 'clang': 1, 'host_arch': 'ia32', 'icu_small': 'false', 'node_compress_internals': 0, 'node_embed_leveldown': 0, 'node_engine_chakra': 0, 'node_engine_mozilla': 0, 'node_engine_v8': 1, 'node_install_npm': 'true', 'node_no_sqlite': 0, 'node_prefix': 'out_android/ia32', 'node_shared_cares': 'false', 'node_shared_http_parser': 'false', 'node_shared_library': 0, 'node_shared_libuv': 'false', 'node_shared_openssl': 'false', 'node_shared_v8': 'false', 'node_shared_zlib': 'false', 'node_static_library': 1, 'node_tag': '', 'node_use_dtrace': 'false', 'node_use_etw': 'false', 'node_use_mdb': 'false', 'node_use_openssl': 'true', 'node_use_perfctr': 'false', 'openssl_no_asm': 0, 'python': '/usr/bin/python', 'target_arch': 'ia32', 'uclibc_defined': 0, 'use_system_icu%': 1, 'uv_library': 'static_library', 'v8_enable_gdbjit': 0, 'v8_enable_i18n_support': 0, 'v8_is_3_14': 1, 'v8_is_3_28': 0, 'v8_no_strict_aliasing': 1, 'v8_optimized_debug': 0, 'v8_random_seed': 0, 'v8_use_snapshot': 'false', 'want_separate_host_toolset': 0}} var path = require('path'); var binding = require('_jx_loadEmbedded').require('sqlite3'); var sqlite3 = module.exports = exports = binding; var util = require('util'); var EventEmitter = require('events').EventEmitter; function errorCallback(args) { if (typeof args[args.length - 1] === 'function') { var callback = args[args.length - 1]; return function(err) { if (err) callback(err); }; } } function inherits(target, source) { for (var k in source.prototype) target.prototype[k] = source.prototype[k]; } sqlite3.cached = { Database: function(file, a, b) { if (file === '' || file === ':memory:') { // Don't cache special databases. return new Database(file, a, b); } if (file[0] !== '/') { file = path.join(process.cwd(), file); } if (!sqlite3.cached.objects[file]) { var db = sqlite3.cached.objects[file] = new Database(file, a, b); } else { // Make sure the callback is called. var db = sqlite3.cached.objects[file]; var callback = (typeof a === 'number') ? b : a; if (typeof callback === 'function') { function cb() { callback.call(db, null); } if (db.open) process.nextTick(cb); else db.once('open', cb); } } return db; }, objects: {} }; var Database = sqlite3.Database; var Statement = sqlite3.Statement; inherits(Database, EventEmitter); inherits(Statement, EventEmitter); // Database#prepare(sql, [bind1, bind2, ...], [callback]) Database.prototype.prepare = function(sql) { var params = Array.prototype.slice.call(arguments, 1); if (!params.length || (params.length === 1 && typeof params[0] === 'function')) { return new Statement(this, sql, params[0]); } else { var statement = new Statement(this, sql, errorCallback(params)); return statement.bind.apply(statement, params); } }; // Database#run(sql, [bind1, bind2, ...], [callback]) Database.prototype.run = function(sql) { var params = Array.prototype.slice.call(arguments, 1); var statement = new Statement(this, sql, errorCallback(params)); statement.run.apply(statement, params).finalize(); return this; }; // Database#get(sql, [bind1, bind2, ...], [callback]) Database.prototype.get = function(sql) { var params = Array.prototype.slice.call(arguments, 1); var statement = new Statement(this, sql, errorCallback(params)); statement.get.apply(statement, params).finalize(); return this; }; // Database#all(sql, [bind1, bind2, ...], [callback]) Database.prototype.all = function(sql) { var params = Array.prototype.slice.call(arguments, 1); var statement = new Statement(this, sql, errorCallback(params)); statement.all.apply(statement, params).finalize(); return this; }; // Database#each(sql, [bind1, bind2, ...], [callback], [complete]) Database.prototype.each = function(sql) { var params = Array.prototype.slice.call(arguments, 1); var statement = new Statement(this, sql, errorCallback(params)); statement.each.apply(statement, params).finalize(); return this; }; Database.prototype.map = function(sql) { var params = Array.prototype.slice.call(arguments, 1); var statement = new Statement(this, sql, errorCallback(params)); statement.map.apply(statement, params).finalize(); return this; }; Statement.prototype.map = function() { var params = Array.prototype.slice.call(arguments); var callback = params.pop(); params.push(function(err, rows) { if (err) return callback(err); var result = {}; if (rows.length) { var keys = Object.keys(rows[0]), key = keys[0]; if (keys.length > 2) { // Value is an object for (var i = 0; i < rows.length; i++) { result[rows[i][key]] = rows[i]; } } else { var value = keys[1]; // Value is a plain value for (var i = 0; i < rows.length; i++) { result[rows[i][key]] = rows[i][value]; } } } callback(err, result); }); return this.all.apply(this, params); }; var isVerbose = false; var supportedEvents = ['trace', 'profile', 'insert', 'update', 'delete']; Database.prototype.addListener = Database.prototype.on = function(type) { var val = EventEmitter.prototype.addListener.apply(this, arguments); if (supportedEvents.indexOf(type) >= 0) { this.configure(type, true); } return val; }; Database.prototype.removeListener = function(type) { var val = EventEmitter.prototype.removeListener.apply(this, arguments); if (supportedEvents.indexOf(type) >= 0 && !this._events[type]) { this.configure(type, false); } return val; }; Database.prototype.removeAllListeners = function(type) { var val = EventEmitter.prototype.removeAllListeners.apply(this, arguments); if (supportedEvents.indexOf(type) >= 0) { this.configure(type, false); } return val; }; var EventEmitter = require('events').EventEmitter; var util = require('util'); function extendTrace(object, property, pos) { var old = object[property]; object[property] = function() { var error = new Error(); var name = object.constructor.name + '#' + property + '(' + Array.prototype.slice.call(arguments).map(function(el) { return util.inspect(el, false, 0); }).join(', ') + ')'; if (typeof pos === 'undefined') pos = -1; if (pos < 0) pos += arguments.length; var cb = arguments[pos]; if (typeof arguments[pos] === 'function') { arguments[pos] = function replacement() { try { return cb.apply(this, arguments); } catch (err) { if (err && err.stack && !err.__augmented) { err.stack = filter(err).join('\n'); err.stack += '\n--> in ' + name; err.stack += '\n' + filter(error).slice(1).join('\n'); err.__augmented = true; } throw err; } }; } return old.apply(this, arguments); }; } function filter(error) { return error.stack.split('\n').filter(function(line) { return line.indexOf(__filename) < 0; }); } // Save the stack trace over EIO callbacks. sqlite3.verbose = function() { if (!isVerbose) { extendTrace(Database.prototype, 'prepare'); extendTrace(Database.prototype, 'get'); extendTrace(Database.prototype, 'run'); extendTrace(Database.prototype, 'all'); extendTrace(Database.prototype, 'each'); extendTrace(Database.prototype, 'map'); extendTrace(Database.prototype, 'exec'); extendTrace(Database.prototype, 'close'); extendTrace(Statement.prototype, 'bind'); extendTrace(Statement.prototype, 'get'); extendTrace(Statement.prototype, 'run'); extendTrace(Statement.prototype, 'all'); extendTrace(Statement.prototype, 'each'); extendTrace(Statement.prototype, 'map'); extendTrace(Statement.prototype, 'reset'); extendTrace(Statement.prototype, 'finalize'); isVerbose = true; } return this; }; // Copyright & License details are available under JXCORE_LICENSE file var Transform = require('_stream_transform'); var binding = process.binding('zlib'); var util = require('util'); var assert = require('assert').ok; // zlib doesn't provide these, so kludge them in following the same // const naming scheme zlib uses. binding.Z_MIN_WINDOWBITS = 8; binding.Z_MAX_WINDOWBITS = 15; binding.Z_DEFAULT_WINDOWBITS = 15; // fewer than 64 bytes per chunk is stupid. // technically it could work with as few as 8, but even 64 bytes // is absurdly low. Usually a MB or more is best. binding.Z_MIN_CHUNK = 64; binding.Z_MAX_CHUNK = Infinity; binding.Z_DEFAULT_CHUNK = (16 * 1024); binding.Z_MIN_MEMLEVEL = 1; binding.Z_MAX_MEMLEVEL = 9; binding.Z_DEFAULT_MEMLEVEL = 8; binding.Z_MIN_LEVEL = -1; binding.Z_MAX_LEVEL = 9; binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION; // expose all the zlib constants Object.keys(binding).forEach(function(k) { if (k.match(/^Z/)) exports[k] = binding[k]; }); // translation table for return codes. exports.codes = { Z_OK: binding.Z_OK, Z_STREAM_END: binding.Z_STREAM_END, Z_NEED_DICT: binding.Z_NEED_DICT, Z_ERRNO: binding.Z_ERRNO, Z_STREAM_ERROR: binding.Z_STREAM_ERROR, Z_DATA_ERROR: binding.Z_DATA_ERROR, Z_MEM_ERROR: binding.Z_MEM_ERROR, Z_BUF_ERROR: binding.Z_BUF_ERROR, Z_VERSION_ERROR: binding.Z_VERSION_ERROR }; Object.keys(exports.codes).forEach(function(k) { exports.codes[exports.codes[k]] = k; }); exports.Deflate = Deflate; exports.Inflate = Inflate; exports.Gzip = Gzip; exports.Gunzip = Gunzip; exports.DeflateRaw = DeflateRaw; exports.InflateRaw = InflateRaw; exports.Unzip = Unzip; exports.createDeflate = function(o) { return new Deflate(o); }; exports.createInflate = function(o) { return new Inflate(o); }; exports.createDeflateRaw = function(o) { return new DeflateRaw(o); }; exports.createInflateRaw = function(o) { return new InflateRaw(o); }; exports.createGzip = function(o) { return new Gzip(o); }; exports.createGunzip = function(o) { return new Gunzip(o); }; exports.createUnzip = function(o) { return new Unzip(o); }; // Convenience methods. // compress/decompress a string or buffer in one step. exports.deflate = function(buffer, callback) { zlibBuffer(new Deflate(), buffer, callback); }; exports.gzip = function(buffer, callback) { zlibBuffer(new Gzip(), buffer, callback); }; exports.deflateRaw = function(buffer, callback) { zlibBuffer(new DeflateRaw(), buffer, callback); }; exports.unzip = function(buffer, callback) { zlibBuffer(new Unzip(), buffer, callback); }; exports.inflate = function(buffer, callback) { zlibBuffer(new Inflate(), buffer, callback); }; exports.gunzip = function(buffer, callback) { zlibBuffer(new Gunzip(), buffer, callback); }; exports.inflateRaw = function(buffer, callback) { zlibBuffer(new InflateRaw(), buffer, callback); }; function zlibBuffer(engine, buffer, callback) { var buffers = []; var nread = 0; engine.on('error', onError); engine.on('end', onEnd); engine.end(buffer); flow(); function flow() { var chunk; while (null !== (chunk = engine.read())) { buffers.push(chunk); nread += chunk.length; } engine.once('readable', flow); } function onError(err) { engine.removeListener('end', onEnd); engine.removeListener('readable', flow); callback(err); } function onEnd() { var buf = Buffer.concat(buffers, nread); buffers = []; callback(null, buf); engine.close(); } } // generic zlib // minimal 2-byte header function Deflate(opts) { if (!(this instanceof Deflate)) return new Deflate(opts); Zlib.call(this, opts, binding.DEFLATE); } function Inflate(opts) { if (!(this instanceof Inflate)) return new Inflate(opts); Zlib.call(this, opts, binding.INFLATE); } // gzip - bigger header, same deflate compression function Gzip(opts) { if (!(this instanceof Gzip)) return new Gzip(opts); Zlib.call(this, opts, binding.GZIP); } function Gunzip(opts) { if (!(this instanceof Gunzip)) return new Gunzip(opts); Zlib.call(this, opts, binding.GUNZIP); } // raw - no header function DeflateRaw(opts) { if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts); Zlib.call(this, opts, binding.DEFLATERAW); } function InflateRaw(opts) { if (!(this instanceof InflateRaw)) return new InflateRaw(opts); Zlib.call(this, opts, binding.INFLATERAW); } // auto-detect header. function Unzip(opts) { if (!(this instanceof Unzip)) return new Unzip(opts); Zlib.call(this, opts, binding.UNZIP); } // the Zlib class they all inherit from // This thing manages the queue of requests, and returns // true or false if there is anything in the queue when // you call the .write() method. function Zlib(opts, mode) { this._opts = opts = opts || {}; this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK; Transform.call(this, opts); if (opts.flush) { if (opts.flush !== binding.Z_NO_FLUSH && opts.flush !== binding.Z_PARTIAL_FLUSH && opts.flush !== binding.Z_SYNC_FLUSH && opts.flush !== binding.Z_FULL_FLUSH && opts.flush !== binding.Z_FINISH && opts.flush !== binding.Z_BLOCK) { throw new Error('Invalid flush flag: ' + opts.flush); } } this._flushFlag = opts.flush || binding.Z_NO_FLUSH; if (opts.chunkSize) { if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) { throw new Error('Invalid chunk size: ' + opts.chunkSize); } } if (opts.windowBits) { if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) { throw new Error('Invalid windowBits: ' + opts.windowBits); } } if (opts.level) { if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) { throw new Error('Invalid compression level: ' + opts.level); } } if (opts.memLevel) { if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) { throw new Error('Invalid memLevel: ' + opts.memLevel); } } if (opts.strategy) { if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) { throw new Error('Invalid strategy: ' + opts.strategy); } } if (opts.dictionary) { if (!Buffer.isBuffer(opts.dictionary)) { throw new Error('Invalid dictionary: it should be a Buffer instance'); } } this._binding = new binding.Zlib(mode); var self = this; this._hadError = false; this._binding.onerror = function(message, errno) { // there is no way to cleanly recover. // continuing only obscures problems. self._binding = null; self._hadError = true; var error = new Error(message); error.errno = errno; error.code = exports.codes[errno]; self.emit('error', error); }; var level = exports.Z_DEFAULT_COMPRESSION; if (typeof opts.level === 'number') level = opts.level; var strategy = exports.Z_DEFAULT_STRATEGY; if (typeof opts.strategy === 'number') strategy = opts.strategy; this._binding.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary); this._buffer = new Buffer(this._chunkSize); this._offset = 0; this._closed = false; this.once('end', this.close); } util.inherits(Zlib, Transform); Zlib.prototype.reset = function reset() { return this._binding.reset(); }; // This is the _flush function called by the transform class, // internally, when the last chunk has been written. Zlib.prototype._flush = function(callback) { this._transform(new Buffer(0), '', callback); }; Zlib.prototype.flush = function(callback) { var ws = this._writableState; if (ws.ended) { if (callback) process.nextTick(callback); } else if (ws.ending) { if (callback) this.once('end', callback); } else if (ws.needDrain) { var self = this; this.once('drain', function() { self.flush(callback); }); } else { this._flushFlag = binding.Z_FULL_FLUSH; this.write(new Buffer(0), '', callback); } }; Zlib.prototype.close = function(callback) { if (callback) process.nextTick(callback); if (this._closed) return; this._closed = true; this._binding.close(); var self = this; process.nextTick(function() { self.emit('close'); }); }; Zlib.prototype._transform = function(chunk, encoding, cb) { var flushFlag; var ws = this._writableState; var ending = ws.ending || ws.ended; var last = ending && (!chunk || ws.length === chunk.length); if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input')); // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag. // If it's explicitly flushing at some other time, then we use // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression // goodness. if (last) flushFlag = binding.Z_FINISH; else { flushFlag = this._flushFlag; // once we've flushed the last of the queue, stop flushing and // go back to the normal behavior. if (chunk.length >= ws.length) { this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH; } } var availInBefore = chunk && chunk.length; var availOutBefore = this._chunkSize - this._offset; var inOff = 0; if (this._closed) return cb(new Error('zlib binding closed')); var req = this._binding.write(flushFlag, chunk, // in inOff, // in_off availInBefore, // in_len this._buffer, // out this._offset, // out_off availOutBefore); // out_len req.buffer = chunk; req.callback = callback; var self = this; function callback(availInAfter, availOutAfter, buffer) { if (self._hadError) return; var have = availOutBefore - availOutAfter; assert(have >= 0, 'have should not go down'); if (have > 0) { var out = self._buffer.slice(self._offset, self._offset + have); self._offset += have; // serve some output to the consumer. self.push(out); } // exhausted the output buffer, or used all the input create a new one. if (availOutAfter === 0 || self._offset >= self._chunkSize) { availOutBefore = self._chunkSize; self._offset = 0; self._buffer = new Buffer(self._chunkSize); } if (availOutAfter === 0) { // Not actually done. Need to reprocess. // Also, update the availInBefore to the availInAfter value, // so that if we have to hit it a third (fourth, etc.) time, // it'll have the correct byte counts. inOff += (availInBefore - availInAfter); availInBefore = availInAfter; var newReq = self._binding.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize); newReq.callback = callback; // this same function newReq.buffer = chunk; return; } // finished with the chunk. cb(); } }; util.inherits(Deflate, Zlib); util.inherits(Inflate, Zlib); util.inherits(Gzip, Zlib); util.inherits(Gunzip, Zlib); util.inherits(DeflateRaw, Zlib); util.inherits(InflateRaw, Zlib); util.inherits(Unzip, Zlib); // Copyright & License details are available under JXCORE_LICENSE file var binding = process.binding('evals'); module.exports = Script; Script.Script = Script; function Script(code, ctx, filename) { if (!(this instanceof Script)) { return new Script(code, ctx, filename); } var ns = new binding.NodeScript(code, ctx, filename); // bind all methods to this Script object Object.keys(binding.NodeScript.prototype).forEach(function(f) { if (typeof binding.NodeScript.prototype[f] === 'function') { this[f] = function() { if (!(this instanceof Script)) { throw new TypeError('invalid call to ' + f); } return ns[f].apply(ns, arguments); }; } }, this); } Script.createScript = function(code, ctx, name) { return new Script(code, ctx, name); }; Script.createContext = binding.NodeScript.createContext; Script.runInContext = binding.NodeScript.runInContext; Script.runInThisContext = binding.NodeScript.runInThisContext; Script.runInNewContext = binding.NodeScript.runInNewContext; // Copyright & License details are available under JXCORE_LICENSE file var isHeadless = process.isEmbedded && (process.platform === 'android' || process.platform == 'winrt' || !process.hasStdFds); var $tw; if (isHeadless) { $tw = process.binding('jxutils_wrap'); } var formatRegExp = /%[sdj%]/g; exports.format = function(f) { if (typeof f !== 'string') { var objects = []; for (var i = 0; i < arguments.length; i++) { objects.push(inspect(arguments[i])); } return objects.join(' '); } var i = 1; var args = arguments; var len = args.length; var str = String(f).replace(formatRegExp, function(x) { if (x === '%%') return '%'; if (i >= len) return x; switch (x) { case '%s': return String(args[i++]); case '%d': return Number(args[i++]); case '%j': return JSON.stringify(args[i++]); default: return x; } }); for (var x = args[i]; i < len; x = args[++i]) { if (x === null || typeof x !== 'object') { str += ' ' + x; } else { str += ' ' + inspect(x); } } return str; }; // Mark that a method should not be used. // Returns a modified function which warns once by default. // If --no-deprecation is set, then it is a no-op. exports.deprecate = function(fn, msg) { if (process.noDeprecation === true) { return fn; } var warned = false; function deprecated() { if (!warned) { if (process.throwDeprecation) { throw new Error(msg); } else if (process.traceDeprecation) { console.trace(msg); } else { console.error(msg); } warned = true; } return fn.apply(this, arguments); } return deprecated; }; exports.print = function() { var arr_stream = new Array(); for (var i = 0, len = arguments.length; i < len; ++i) { if (isHeadless) arr_stream.push(String(arguments[i])); else process.stdout.write(String(arguments[i])); } if (isHeadless) { $tw.print(arr_stream.join('')); arr_stream = null; } }; exports.puts = function() { for (var i = 0, len = arguments.length; i < len; ++i) { if (isHeadless) $tw.print(arguments[i] + ''); else process.stdout.write(arguments[i] + '\n'); } }; exports.debug = function(x) { process.stderr.write('DEBUG: ' + x + '\n'); }; var error = exports.error = function(x) { for (var i = 0, len = arguments.length; i < len; ++i) { if (isHeadless) $tw.print(arguments[i] + '\n'); else process.stderr.write(arguments[i] + '\n'); } }; var debugs = {}; var debugEnviron; exports.debuglog = function(set) { if (typeof debugEnviron === 'undefined') debugEnviron = process.env.NODE_DEBUG || ''; set = set.toUpperCase(); if (!debugs[set]) { if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { var pid = process.pid; debugs[set] = function() { var msg = exports.format.apply(exports, arguments); console.error('%s %d: %s', set, pid, msg); }; } else { debugs[set] = function() {}; } } return debugs[set]; }; /** * Echos the value of a value. Trys to print the value out in the best way * possible given the different types. * * @param {Object} * obj The object to print out. * @param {Object} * opts Optional options object that alters the output. */ /* legacy: obj, showHidden, depth, colors */ function inspect(obj, opts) { // default options var ctx = { seen: [], stylize: stylizeNoColor }; // legacy... if (arguments.length >= 3) ctx.depth = arguments[2]; if (arguments.length >= 4) ctx.colors = arguments[3]; if (typeof opts === 'boolean') { // legacy... ctx.showHidden = opts; } else if (opts) { // got an "options" object exports._extend(ctx, opts); } // set default options if (typeof ctx.showHidden === 'undefined') ctx.showHidden = false; if (typeof ctx.depth === 'undefined') ctx.depth = 2; if (typeof ctx.colors === 'undefined') ctx.colors = false; if (typeof ctx.customInspect === 'undefined') ctx.customInspect = true; if (ctx.colors) ctx.stylize = stylizeWithColor; return formatValue(ctx, obj, ctx.depth); } exports.inspect = inspect; // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics inspect.colors = { 'bold': [1, 22], 'italic': [3, 23], 'underline': [4, 24], 'inverse': [7, 27], 'white': [37, 39], 'grey': [90, 39], 'black': [30, 39], 'blue': [34, 39], 'cyan': [36, 39], 'green': [32, 39], 'magenta': [35, 39], 'red': [31, 39], 'yellow': [33, 39] }; // Don't use 'blue' not visible on cmd.exe inspect.styles = { 'special': 'cyan', 'number': 'yellow', 'boolean': 'yellow', 'undefined': 'grey', 'null': 'bold', 'string': 'green', 'date': 'magenta', // "name": intentionally not styling 'regexp': 'red' }; function stylizeWithColor(str, styleType) { var style = inspect.styles[styleType]; if (style) { return '\u001b[' + inspect.colors[style][0] + 'm' + str + '\u001b[' + inspect.colors[style][1] + 'm'; } else { return str; } } function stylizeNoColor(str, styleType) { return str; } function arrayToHash(array) { var hash = {}; array.forEach(function(val, idx) { hash[val] = true; }); return hash; } function formatValue(ctx, value, recurseTimes) { // Provide a hook for user-specified inspect functions. // Check that value is an object with an inspect function on it if (ctx.customInspect && value && typeof value.inspect === 'function' && // Filter out the util module, it's inspect function is special value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check. !(value.constructor && value.constructor.prototype === value)) { return String(value.inspect(recurseTimes)); } // Primitive types cannot have properties var primitive = formatPrimitive(ctx, value); if (primitive) { return primitive; } // Look up the keys of the object. var keys = Object.keys(value); var visibleKeys = arrayToHash(keys); if (ctx.showHidden) { keys = Object.getOwnPropertyNames(value); } // Some type of object without properties can be shortcutted. if (keys.length === 0) { if (typeof value === 'function') { var name = value.name ? ': ' + value.name : ''; return ctx.stylize('[Function' + name + ']', 'special'); } if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } if (isDate(value)) { return ctx.stylize(Date.prototype.toString.call(value), 'date'); } if (isError(value)) { return formatError(value); } } var base = '', array = false, braces = ['{', '}']; // Make Array say that they are Array if (isArray(value)) { array = true; braces = ['[', ']']; } // Make functions say that they are functions if (typeof value === 'function') { var n = value.name ? ': ' + value.name : ''; base = ' [Function' + n + ']'; } // Make RegExps say that they are RegExps if (isRegExp(value)) { base = ' ' + RegExp.prototype.toString.call(value); } // Make dates with properties first say the date if (isDate(value)) { base = ' ' + Date.prototype.toUTCString.call(value); } // Make error with message first say the error if (isError(value)) { base = ' ' + formatError(value); } if (keys.length === 0 && (!array || value.length == 0)) { return braces[0] + base + braces[1]; } if (recurseTimes < 0) { if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } else { return ctx.stylize('[Object]', 'special'); } } ctx.seen.push(value); var output; if (array) { output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); } else { output = keys.map(function(key) { return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); }); } ctx.seen.pop(); return reduceToSingleString(output, base, braces); } function formatPrimitive(ctx, value) { switch (typeof value) { case 'undefined': return ctx.stylize('undefined', 'undefined'); case 'string': var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') .replace(/'/g, "\\'") .replace(/\\"/g, '"') + '\''; return ctx.stylize(simple, 'string'); case 'number': return ctx.stylize('' + value, 'number'); case 'boolean': return ctx.stylize('' + value, 'boolean'); } // For some reason typeof null is "object", so special case here. if (value === null) { return ctx.stylize('null', 'null'); } } function formatError(value) { return '[' + Error.prototype.toString.call(value) + ']'; } function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { var output = []; for (var i = 0, l = value.length; i < l; ++i) { if (hasOwnProperty(value, String(i))) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); } else { output.push(''); } } keys.forEach(function(key) { if (!key.match(/^\d+$/)) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); } }); return output; } function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { var name, str, desc; desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; if (desc.get) { if (desc.set) { str = ctx.stylize('[Getter/Setter]', 'special'); } else { str = ctx.stylize('[Getter]', 'special'); } } else { if (desc.set) { str = ctx.stylize('[Setter]', 'special'); } } if (!hasOwnProperty(visibleKeys, key)) { name = '[' + key + ']'; } if (!str) { if (ctx.seen.indexOf(desc.value) < 0) { if (recurseTimes === null) { str = formatValue(ctx, desc.value, null); } else { str = formatValue(ctx, desc.value, recurseTimes - 1); } if (str.indexOf('\n') > -1) { if (array) { str = str.split('\n').map(function(line) { return ' ' + line; }).join('\n').substr(2); } else { str = '\n' + str.split('\n').map(function(line) { return ' ' + line; }).join('\n'); } } } else { str = ctx.stylize('[Circular]', 'special'); } } if (typeof name === 'undefined') { if (array && key.match(/^\d+$/)) { return str; } name = JSON.stringify('' + key); if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { name = name.substr(1, name.length - 2); name = ctx.stylize(name, 'name'); } else { name = name.replace(/'/g, "\\'") .replace(/\\"/g, '"') .replace(/(^"|"$)/g, "'"); name = ctx.stylize(name, 'string'); } } return name + ': ' + str; } function reduceToSingleString(output, base, braces) { var numLinesEst = 0; var length = output.reduce(function(prev, cur) { numLinesEst++; if (cur.indexOf('\n') >= 0) numLinesEst++; return prev + cur.length + 1; }, 0); if (length > 60) { return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; } return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; } // NOTE: These type checking functions intentionally don't use `instanceof` // because it is fragile and can be easily faked with `Object.create()`. function isArray(ar) { return Array.isArray(ar) || (typeof ar === 'object' && objectToString(ar) === '[object Array]'); } exports.isArray = isArray; function isRegExp(re) { return typeof re === 'object' && objectToString(re) === '[object RegExp]'; } exports.isRegExp = isRegExp; function isDate(d) { return typeof d === 'object' && objectToString(d) === '[object Date]'; } exports.isDate = isDate; function isError(e) { return typeof e === 'object' && (objectToString(e) === '[object Error]' || e instanceof Error); } exports.isError = isError; function objectToString(o) { return Object.prototype.toString.call(o); } exports.p = exports.deprecate(function() { for (var i = 0, len = arguments.length; i < len; ++i) { error(exports.inspect(arguments[i])); } }, 'util.p: Use console.error() instead.'); function pad(n) { return n < 10 ? '0' + n.toString(10) : n.toString(10); } var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34 function timestamp() { var d = new Date(); var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); return [d.getDate(), months[d.getMonth()], time].join(' '); } exports.log = function(msg) { exports.puts(timestamp() + ' - ' + msg.toString()); }; exports.exec = exports.deprecate(function() { return require('child_process').exec.apply(this, arguments); }, 'util.exec is now called `child_process.exec`.'); function pump(readStream, writeStream, callback) { var callbackCalled = false; function call(a, b, c) { if (callback && !callbackCalled) { callback(a, b, c); callbackCalled = true; } } readStream.addListener('data', function(chunk) { if (writeStream.write(chunk) === false) readStream.pause(); }); writeStream.addListener('drain', function() { readStream.resume(); }); readStream.addListener('end', function() { writeStream.end(); }); readStream.addListener('close', function() { call(); }); readStream.addListener('error', function(err) { writeStream.end(); call(err); }); writeStream.addListener('error', function(err) { readStream.destroy(); call(err); }); } exports.pump = exports.deprecate(pump, 'util.pump() is deprecated. Use readableStream.pipe() instead.'); // Object.setPrototypeOf polyfill needed for V8 3.14 version of util.inherits. // Should be a no-op on other engines. if (!Object.setPrototypeOf) { Object.setPrototypeOf = function(obj, proto) { obj.__proto__ = proto; return obj; }; } /** * Inherit the prototype methods from one constructor into another. * * The Function.prototype.inherits from lang.js rewritten as a standalone * function (not on Function.prototype). NOTE: If this file is to be loaded * during bootstrapping this function needs to be rewritten using some native * functions as prototype setup using normal JavaScript does not work as * expected during bootstrapping (see mirror.js in r114903). * * @param {function} ctor Constructor function which needs to inherit the * prototype. * @param {function} superCtor Constructor function to inherit prototype from. * @throws {TypeError} Will error if either constructor is null, or if * the super constructor lacks a prototype. */ exports.inherits = function(ctor, superCtor) { if (ctor === undefined || ctor === null) throw new TypeError('The constructor to "inherits" must not be ' + 'null or undefined'); if (superCtor === undefined || superCtor === null) throw new TypeError('The super constructor to "inherits" must not ' + 'be null or undefined'); if (superCtor.prototype === undefined) throw new TypeError('The super constructor to "inherits" must ' + 'have a prototype'); ctor.super_ = superCtor; Object.setPrototypeOf(ctor.prototype, superCtor.prototype); }; exports._extend = function(origin, add) { // Don't do anything if add isn't an object if (!add || typeof add !== 'object') return origin; var keys = Object.keys(add); var i = keys.length; while (i--) { origin[keys[i]] = add[keys[i]]; } return origin; }; function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } // Copyright & License details are available under JXCORE_LICENSE file var punycode = require('punycode'); exports.parse = urlParse; exports.resolve = urlResolve; exports.resolveObject = urlResolveObject; exports.format = urlFormat; exports.Url = Url; function Url() { this.protocol = null; this.slashes = null; this.auth = null; this.host = null; this.port = null; this.hostname = null; this.hash = null; this.search = null; this.query = null; this.pathname = null; this.path = null; this.href = null; } // Reference: RFC 3986, RFC 1808, RFC 2396 // define these here so at least they only have to be // compiled once on the first module load. var protocolPattern = /^([a-z0-9.+-]+:)/i, portPattern = /:[0-9]*$/, // RFC 2396: characters reserved for delimiting URLs. // We actually just auto-escape these. delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], // RFC 2396: characters not allowed for various reasons. unwise = ['{', '}', '|', '\\', '^', '~', '`'].concat(delims), // Allowed by RFCs, but cause of XSS attacks. Always escape these. autoEscape = ['\''].concat(delims), // Characters that are never ever allowed in a hostname. // Note that any invalid chars are also handled, but these // are the ones that are *expected* to be seen, so we fast-path // them. nonHostChars = ['%', '/', '?', ';', '#'] .concat(unwise).concat(autoEscape), hostEndingChars = ['/', '?', '#'], hostnameMaxLen = 255, hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/, hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/, // protocols that can allow "unsafe" and "unwise" chars. unsafeProtocol = { 'javascript': true, 'javascript:': true }, // protocols that never have a hostname. hostlessProtocol = { 'javascript': true, 'javascript:': true }, // protocols that always contain a // bit. slashedProtocol = { 'http': true, 'https': true, 'ftp': true, 'gopher': true, 'file': true, 'http:': true, 'https:': true, 'ftp:': true, 'gopher:': true, 'file:': true }, querystring = require('querystring'); function urlParse(url, parseQueryString, slashesDenoteHost) { if (url && typeof(url) === 'object' && url instanceof Url) return url; var u = new Url; u.parse(url, parseQueryString, slashesDenoteHost); return u; } Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { if (typeof url !== 'string') { throw new TypeError("Parameter 'url' must be a string, not " + typeof url); } // Copy chrome, IE, opera backslash-handling behavior. // See: https://code.google.com/p/chromium/issues/detail?id=25916 var hashSplit = url.split('#'); hashSplit[0] = hashSplit[0].replace(/\\/g, '/'); url = hashSplit.join('#'); var rest = url; // trim before proceeding. // This is to support parse stuff like " http://foo.com \n" rest = rest.trim(); var proto = protocolPattern.exec(rest); if (proto) { proto = proto[0]; var lowerProto = proto.toLowerCase(); this.protocol = lowerProto; rest = rest.substr(proto.length); } // figure out if it's got a host // user@server is *always* interpreted as a hostname, and url // resolution will treat //foo/bar as host=foo,path=bar because that's // how the browser resolves relative URLs. if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { var slashes = rest.substr(0, 2) === '//'; if (slashes && !(proto && hostlessProtocol[proto])) { rest = rest.substr(2); this.slashes = true; } } if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) { // there's a hostname. // the first instance of /, ?, ;, or # ends the host. // // If there is an @ in the hostname, then non-host chars *are* allowed // to the left of the last @ sign, unless some host-ending character // comes *before* the @-sign. // URLs are obnoxious. // // ex: // http://a@b@c/ => user:a@b host:c // http://a@b?@c => user:a host:c path:/?@c // v0.12 TODO(isaacs): This is not quite how Chrome does things. // Review our test case against browsers more comprehensively. // find the first instance of any hostEndingChars var hostEnd = -1; for (var i = 0; i < hostEndingChars.length; i++) { var hec = rest.indexOf(hostEndingChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec; } // at this point, either we have an explicit point where the // auth portion cannot go past, or the last @ char is the decider. var auth, atSign; if (hostEnd === -1) { // atSign can be anywhere. atSign = rest.lastIndexOf('@'); } else { // atSign must be in auth portion. // http://a@b/c@d => host:b auth:a path:/c@d atSign = rest.lastIndexOf('@', hostEnd); } // Now we have a portion which is definitely the auth. // Pull that off. if (atSign !== -1) { auth = rest.slice(0, atSign); rest = rest.slice(atSign + 1); this.auth = decodeURIComponent(auth); } // the host is the remaining to the left of the first non-host char hostEnd = -1; for (var i = 0; i < nonHostChars.length; i++) { var hec = rest.indexOf(nonHostChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec; } // if we still have not hit it, then the entire thing is a host. if (hostEnd === -1) hostEnd = rest.length; this.host = rest.slice(0, hostEnd); rest = rest.slice(hostEnd); // pull out port. this.parseHost(); // we've indicated that there is a hostname, // so even if it's empty, it has to be present. this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ] // assume that it's an IPv6 address. var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little. if (!ipv6Hostname) { var hostparts = this.hostname.split(/\./); for (var i = 0, l = hostparts.length; i < l; i++) { var part = hostparts[i]; if (!part) continue; if (!part.match(hostnamePartPattern)) { var newpart = ''; for (var j = 0, k = part.length; j < k; j++) { if (part.charCodeAt(j) > 127) { // we replace non-ASCII char with a temporary placeholder // we need this to make sure size of hostname is not // broken by replacing non-ASCII by nothing newpart += 'x'; } else { newpart += part[j]; } } // we test again with ASCII char only if (!newpart.match(hostnamePartPattern)) { var validParts = hostparts.slice(0, i); var notHost = hostparts.slice(i + 1); var bit = part.match(hostnamePartStart); if (bit) { validParts.push(bit[1]); notHost.unshift(bit[2]); } if (notHost.length) { rest = '/' + notHost.join('.') + rest; } this.hostname = validParts.join('.'); break; } } } } if (this.hostname.length > hostnameMaxLen) { this.hostname = ''; } else { // hostnames are always lower case. this.hostname = this.hostname.toLowerCase(); } if (!ipv6Hostname) { // IDNA Support: Returns a punycoded representation of "domain". // It only converts parts of the domain name that // have non-ASCII characters, i.e. it doesn't matter if // you call it with a domain that already is ASCII-only. this.hostname = punycode.toASCII(this.hostname); } var p = this.port ? ':' + this.port : ''; var h = this.hostname || ''; this.host = h + p; this.href += this.host; // strip [ and ] from the hostname // the host field still retains them, though if (ipv6Hostname) { this.hostname = this.hostname.substr(1, this.hostname.length - 2); if (rest[0] !== '/') { rest = '/' + rest; } } } // now rest is set to the post-host stuff. // chop off any delim chars. if (!unsafeProtocol[lowerProto]) { // First, make 100% sure that any "autoEscape" chars get // escaped, even if encodeURIComponent doesn't think they // need to be. for (var i = 0, l = autoEscape.length; i < l; i++) { var ae = autoEscape[i]; var esc = encodeURIComponent(ae); if (esc === ae) { esc = escape(ae); } rest = rest.split(ae).join(esc); } } // chop off from the tail first. var hash = rest.indexOf('#'); if (hash !== -1) { // got a fragment string. this.hash = rest.substr(hash); rest = rest.slice(0, hash); } var qm = rest.indexOf('?'); if (qm !== -1) { this.search = rest.substr(qm); this.query = rest.substr(qm + 1); if (parseQueryString) { this.query = querystring.parse(this.query); } rest = rest.slice(0, qm); } else if (parseQueryString) { // no query string, but parseQueryString still requested this.search = ''; this.query = {}; } if (rest) this.pathname = rest; if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) { this.pathname = '/'; } // to support http.request if (this.pathname || this.search) { var p = this.pathname || ''; var s = this.search || ''; this.path = p + s; } // finally, reconstruct the href based on what has been validated. this.href = this.format(); return this; }; // format a parsed object into a url string function urlFormat(obj) { // ensure it's an object, and not a string url. // If it's an obj, this is a no-op. // this way, you can call url_format() on strings // to clean up potentially wonky urls. if (typeof(obj) === 'string') obj = urlParse(obj); if (!(obj instanceof Url)) return Url.prototype.format.call(obj); return obj.format(); } Url.prototype.format = function() { var auth = this.auth || ''; if (auth) { auth = encodeURIComponent(auth); auth = auth.replace(/%3A/i, ':'); auth += '@'; } var protocol = this.protocol || '', pathname = this.pathname || '', hash = this.hash || '', host = false, query = ''; if (this.host) { host = auth + this.host; } else if (this.hostname) { host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']'); if (this.port) { host += ':' + this.port; } } if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) { query = querystring.stringify(this.query); } var search = this.search || (query && ('?' + query)) || ''; if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. // unless they had them to begin with. if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) { host = '//' + (host || ''); if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; } else if (!host) { host = ''; } if (hash && hash.charAt(0) !== '#') hash = '#' + hash; if (search && search.charAt(0) !== '?') search = '?' + search; pathname = pathname.replace(/[?#]/g, function(match) { return encodeURIComponent(match); }); search = search.replace('#', '%23'); return protocol + host + pathname + search + hash; }; function urlResolve(source, relative) { return urlParse(source, false, true).resolve(relative); } Url.prototype.resolve = function(relative) { return this.resolveObject(urlParse(relative, false, true)).format(); }; function urlResolveObject(source, relative) { if (!source) return relative; return urlParse(source, false, true).resolveObject(relative); } Url.prototype.resolveObject = function(relative) { if (typeof relative === 'string') { var rel = new Url(); rel.parse(relative, false, true); relative = rel; } var result = new Url(); Object.keys(this).forEach(function(k) { result[k] = this[k]; }, this); // hash is always overridden, no matter what. // even href="" will remove it. result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here. if (relative.href === '') { result.href = result.format(); return result; } // hrefs like //foo/bar always cut to the protocol. if (relative.slashes && !relative.protocol) { // take everything except the protocol from relative Object.keys(relative).forEach(function(k) { if (k !== 'protocol') result[k] = relative[k]; }); // urlParse appends trailing / to urls like http://www.example.com if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) { result.path = result.pathname = '/'; } result.href = result.format(); return result; } if (relative.protocol && relative.protocol !== result.protocol) { // if it's a known url protocol, then changing // the protocol does weird things // first, if it's not file:, then we MUST have a host, // and if there was a path // to begin with, then we MUST have a path. // if it is file:, then the host is dropped, // because that's known to be hostless. // anything else is assumed to be absolute. if (!slashedProtocol[relative.protocol]) { Object.keys(relative).forEach(function(k) { result[k] = relative[k]; }); result.href = result.format(); return result; } result.protocol = relative.protocol; if (!relative.host && !hostlessProtocol[relative.protocol]) { var relPath = (relative.pathname || '').split('/'); while (relPath.length && !(relative.host = relPath.shift())); if (!relative.host) relative.host = ''; if (!relative.hostname) relative.hostname = ''; if (relPath[0] !== '') relPath.unshift(''); if (relPath.length < 2) relPath.unshift(''); result.pathname = relPath.join('/'); } else { result.pathname = relative.pathname; } result.search = relative.search; result.query = relative.query; result.host = relative.host || ''; result.auth = relative.auth; result.hostname = relative.hostname || relative.host; result.port = relative.port; // to support http.request if (result.pathname || result.search) { var p = result.pathname || ''; var s = result.search || ''; result.path = p + s; } result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; } var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), isRelAbs = ( relative.host || relative.pathname && relative.pathname.charAt(0) === '/' ), mustEndAbs = (isRelAbs || isSourceAbs || (result.host && relative.pathname)), removeAllDots = mustEndAbs, srcPath = result.pathname && result.pathname.split('/') || [], relPath = relative.pathname && relative.pathname.split('/') || [], psychotic = result.protocol && !slashedProtocol[result.protocol]; // if the url is a non-slashed url, then relative // links like ../.. should be able // to crawl up to the hostname, as well. This is strange. // result.protocol has already been set by now. // Later on, put the first path part into the host field. if (psychotic) { result.hostname = ''; result.port = null; if (result.host) { if (srcPath[0] === '') srcPath[0] = result.host; else srcPath.unshift(result.host); } result.host = ''; if (relative.protocol) { relative.hostname = null; relative.port = null; if (relative.host) { if (relPath[0] === '') relPath[0] = relative.host; else relPath.unshift(relative.host); } relative.host = null; } mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); } if (isRelAbs) { // it's absolute. result.host = (relative.host || relative.host === '') ? relative.host : result.host; result.hostname = (relative.hostname || relative.hostname === '') ? relative.hostname : result.hostname; result.search = relative.search; result.query = relative.query; srcPath = relPath; // fall through to the dot-handling below. } else if (relPath.length) { // it's relative // throw away the existing file, and take the new path instead. if (!srcPath) srcPath = []; srcPath.pop(); srcPath = srcPath.concat(relPath); result.search = relative.search; result.query = relative.query; } else if (relative.search !== null && relative.search !== undefined) { // just pull out the search. // like href='?foo'. // Put this after the other two cases because it simplifies the booleans if (psychotic) { result.hostname = result.host = srcPath.shift(); // occationaly the auth can get stuck only in host // this especialy happens in cases like // url.resolveObject('mailto:local1@domain1', 'local2@domain2') var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.host = result.hostname = authInHost.shift(); } } result.search = relative.search; result.query = relative.query; // to support http.request if (result.pathname !== null || result.search !== null) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.href = result.format(); return result; } if (!srcPath.length) { // no path at all. easy. // we've already handled the other stuff above. result.pathname = null; // to support http.request if (result.search) { result.path = '/' + result.search; } else { result.path = null; } result.href = result.format(); return result; } // if a url ENDs in . or .., then it must get a trailing slash. // however, if it ends in anything else non-slashy, // then it must NOT get a trailing slash. var last = srcPath.slice(-1)[0]; var hasTrailingSlash = ( (result.host || relative.host) && (last === '.' || last === '..') || last === ''); // strip single dots, resolve double dots to parent dir // if the path tries to go above the root, `up` ends up > 0 var up = 0; for (var i = srcPath.length; i >= 0; i--) { last = srcPath[i]; if (last == '.') { srcPath.splice(i, 1); } else if (last === '..') { srcPath.splice(i, 1); up++; } else if (up) { srcPath.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (!mustEndAbs && !removeAllDots) { for (; up--; up) { srcPath.unshift('..'); } } if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { srcPath.unshift(''); } if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { srcPath.push(''); } var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/'); // put the host back if (psychotic) { result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; // occationaly the auth can get stuck only in host // this especialy happens in cases like // url.resolveObject('mailto:local1@domain1', 'local2@domain2') var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.host = result.hostname = authInHost.shift(); } } mustEndAbs = mustEndAbs || (result.host && srcPath.length); if (mustEndAbs && !isAbsolute) { srcPath.unshift(''); } if (!srcPath.length) { result.pathname = null; result.path = null; } else { result.pathname = srcPath.join('/'); } // to support request.http if (result.pathname !== null || result.search !== null) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.auth = relative.auth || result.auth; result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; }; Url.prototype.parseHost = function() { var host = this.host; var port = portPattern.exec(host); if (port) { port = port[0]; if (port !== ':') { this.port = port.substr(1); } host = host.substr(0, host.length - port.length); } if (host) this.hostname = host; }; // Copyright & License details are available under JXCORE_LICENSE file var assert = require('assert'); var inherits = require('util').inherits; var net = require('net'); var TTY = process.binding('tty_wrap').TTY; var isTTY = process.binding('tty_wrap').isTTY; var util = require('util'); exports.isatty = function(fd) { return isTTY(fd); }; // backwards-compat exports.setRawMode = util.deprecate(function(flag) { if (!process.stdin.isTTY) { throw new Error('can\'t set raw mode on non-tty'); } process.stdin.setRawMode(flag); }, 'tty.setRawMode: Use `process.stdin.setRawMode()` instead.'); function ReadStream(fd, options) { if (!(this instanceof ReadStream)) return new ReadStream(fd, options); options = util._extend({ highWaterMark: 0, readable: true, writable: false, handle: new TTY(fd, true) }, options); net.Socket.call(this, options); this.isRaw = false; this.isTTY = true; } inherits(ReadStream, net.Socket); exports.ReadStream = ReadStream; ReadStream.prototype.setRawMode = function(flag) { flag = !!flag; this._handle.setRawMode(flag); this.isRaw = flag; }; function WriteStream(fd) { if (!(this instanceof WriteStream)) return new WriteStream(fd); net.Socket.call(this, { handle: new TTY(fd, false), readable: false, writable: true }); var winSize = this._handle.getWindowSize(); if (winSize) { this.columns = winSize[0]; this.rows = winSize[1]; } } inherits(WriteStream, net.Socket); exports.WriteStream = WriteStream; WriteStream.prototype.isTTY = true; WriteStream.prototype._refreshSize = function() { var oldCols = this.columns; var oldRows = this.rows; var winSize = this._handle.getWindowSize(); if (!winSize) { this.emit('error', errnoException(process._errno, 'getWindowSize')); return; } var newCols = winSize[0]; var newRows = winSize[1]; if (oldCols !== newCols || oldRows !== newRows) { this.columns = newCols; this.rows = newRows; this.emit('resize'); } }; // backwards-compat WriteStream.prototype.cursorTo = function(x, y) { require('readline').cursorTo(this, x, y); }; WriteStream.prototype.moveCursor = function(dx, dy) { require('readline').moveCursor(this, dx, dy); }; WriteStream.prototype.clearLine = function(dir) { require('readline').clearLine(this, dir); }; WriteStream.prototype.clearScreenDown = function() { require('readline').clearScreenDown(this); }; WriteStream.prototype.getWindowSize = function() { return [this.columns, this.rows]; }; // TODO share with net_uv and others function errnoException(errorno, syscall) { var e = new Error(syscall + ' ' + errorno); e.errno = e.code = errorno; e.syscall = syscall; return e; } // Copyright & License details are available under JXCORE_LICENSE file var crypto = require('crypto'); var util = require('util'); var net = require('net'); var url = require('url'); var events = require('events'); var stream = require('stream'); var assert = require('assert').ok; var Buffer = require('buffer').Buffer; var constants = require('constants'); var Timer = process.binding('timer_wrap').Timer; var DEFAULT_CIPHERS = 'ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:' + // TLS 1.2 'PSK-AES256-CBC-SHA:PSK-3DES-EDE-CBC-SHA:PSK-AES128-CBC-SHA:' + //PSK adding to default ciphers 'RC4:HIGH:!MD5:!aNULL:!EDH'; // TLS 1.0 // Allow {CLIENT_RENEG_LIMIT} client-initiated session renegotiations // every {CLIENT_RENEG_WINDOW} seconds. An error event is emitted if more // renegotations are seen. The settings are applied to all remote client // connections. exports.CLIENT_RENEG_LIMIT = 3; exports.CLIENT_RENEG_WINDOW = 600; exports.SLAB_BUFFER_SIZE = 10 * 1024 * 1024; exports.getCiphers = function() { var names = process.binding('crypto').getSSLCiphers(); // Drop all-caps names in favor of their lowercase aliases, var ctx = {}; names.forEach(function(name) { if (/^[0-9A-Z\-]+$/.test(name)) name = name.toLowerCase(); ctx[name] = true; }); return Object.getOwnPropertyNames(ctx).sort(); }; var debug; if (process.env.NODE_DEBUG && /tls/.test(process.env.NODE_DEBUG)) { debug = function(a) { console.error('TLS:', a); }; } else { debug = function() { }; } var Connection = null; try { Connection = process.binding('crypto').Connection; } catch (e) { throw new Error('node.js not compiled with openssl crypto support.'); } // Convert protocols array into valid OpenSSL protocols list // ("\x06spdy/2\x08http/1.1\x08http/1.0") function convertNPNProtocols(NPNProtocols, out) { // If NPNProtocols is Array - translate it into buffer if (Array.isArray(NPNProtocols)) { var buff = new Buffer(NPNProtocols.reduce(function(p, c) { return p + 1 + Buffer.byteLength(c); }, 0)); NPNProtocols.reduce(function(offset, c) { var clen = Buffer.byteLength(c); buff[offset] = clen; buff.write(c, offset + 1); return offset + 1 + clen; }, 0); NPNProtocols = buff; } // If it's already a Buffer - store it if (Buffer.isBuffer(NPNProtocols)) { out.NPNProtocols = NPNProtocols; } } function checkServerIdentity(host, cert) { // Create regexp to much hostnames function regexpify(host, wildcards) { // Add trailing dot (make hostnames uniform) if (!/\.$/.test(host)) host += '.'; // The same applies to hostname with more than one wildcard, // if hostname has wildcard when wildcards are not allowed, // or if there are less than two dots after wildcard (i.e. *.com or *d.com) // // also // // "The client SHOULD NOT attempt to match a presented identifier in // which the wildcard character comprises a label other than the // left-most label (e.g., do not match bar.*.example.net)." // RFC6125 if (!wildcards && /\*/.test(host) || /[\.\*].*\*/.test(host) || /\*/.test(host) && !/\*.*\..+\..+/.test(host)) { return /$./; } // Replace wildcard chars with regexp's wildcard and // escape all characters that have special meaning in regexps // (i.e. '.', '[', '{', '*', and others) var re = host.replace( /\*([a-z0-9\\-_\.])|[\.,\-\\\^\$+?*\[\]\(\):!\|{}]/g, function(all, sub) { if (sub) return '[a-z0-9\\-_]*' + (sub === '-' ? '\\-' : sub); return '\\' + all; }); return new RegExp('^' + re + '$', 'i'); } var dnsNames = [], uriNames = [], ips = [], matchCN = true, valid = false; // There're several names to perform check against: // CN and altnames in certificate extension // (DNS names, IP addresses, and URIs) // // Walk through altnames and generate lists of those names if (cert.subjectaltname) { cert.subjectaltname.split(/, /g).forEach(function(altname) { if (/^DNS:/.test(altname)) { dnsNames.push(altname.slice(4)); } else if (/^IP Address:/.test(altname)) { ips.push(altname.slice(11)); } else if (/^URI:/.test(altname)) { var uri = url.parse(altname.slice(4)); if (uri) uriNames.push(uri.hostname); } }); } // If hostname is an IP address, it should be present in the list of IP // addresses. if (net.isIP(host)) { valid = ips.some(function(ip) { return ip === host; }); } else { // Transform hostname to canonical form if (!/\.$/.test(host)) host += '.'; // Otherwise check all DNS/URI records from certificate // (with allowed wildcards) dnsNames = dnsNames.map(function(name) { return regexpify(name, true); }); // Wildcards ain't allowed in URI names uriNames = uriNames.map(function(name) { return regexpify(name, false); }); dnsNames = dnsNames.concat(uriNames); if (dnsNames.length > 0) matchCN = false; // Match against Common Name (CN) only if no supported identifiers are // present. // // "As noted, a client MUST NOT seek a match for a reference identifier // of CN-ID if the presented identifiers include a DNS-ID, SRV-ID, // URI-ID, or any application-specific identifier types supported by the // client." // RFC6125 if (matchCN) { var commonNames = cert.subject.CN; if (Array.isArray(commonNames)) { for (var i = 0, k = commonNames.length; i < k; ++i) { dnsNames.push(regexpify(commonNames[i], true)); } } else { dnsNames.push(regexpify(commonNames, true)); } } valid = dnsNames.some(function(re) { return re.test(host); }); } return valid; } exports.checkServerIdentity = checkServerIdentity; function SlabBuffer() { this.create(); } SlabBuffer.prototype.create = function create() { this.isFull = false; this.pool = new Buffer(exports.SLAB_BUFFER_SIZE); this.offset = 0; this.remaining = this.pool.length; }; SlabBuffer.prototype.use = function use(context, fn, size) { if (this.remaining === 0) { this.isFull = true; return 0; } var actualSize = this.remaining; if (size !== null) actualSize = Math.min(size, actualSize); var bytes = fn.call(context, this.pool, this.offset, actualSize); if (bytes > 0) { this.offset += bytes; this.remaining -= bytes; } assert(this.remaining >= 0); return bytes; }; var slabBuffer = null; // Base class of both CleartextStream and EncryptedStream function CryptoStream(pair, options) { stream.Duplex.call(this, options); this.pair = pair; this._pending = null; this._pendingEncoding = ''; this._pendingCallback = null; this._doneFlag = false; this._retryAfterPartial = false; this._halfRead = false; this._sslOutCb = null; this._resumingSession = false; this._reading = true; this._destroyed = false; this._ended = false; this._finished = false; this._opposite = null; if (slabBuffer === null) slabBuffer = new SlabBuffer(); this._buffer = slabBuffer; this.once('finish', onCryptoStreamFinish); // net.Socket calls .onend too this.once('end', onCryptoStreamEnd); } util.inherits(CryptoStream, stream.Duplex); function onCryptoStreamFinish() { this._finished = true; if (this === this.pair.cleartext) { debug('cleartext.onfinish'); if (this.pair.ssl) { // Generate close notify // NOTE: first call checks if client has sent us shutdown, // second call enqueues shutdown into the BIO. if (this.pair.ssl.shutdown() !== 1) { if (this.pair.ssl && this.pair.ssl.error) return this.pair.error(); this.pair.ssl.shutdown(); } if (this.pair.ssl && this.pair.ssl.error) return this.pair.error(); } } else { debug('encrypted.onfinish'); } // Try to read just to get sure that we won't miss EOF if (this._opposite.readable) this._opposite.read(0); if (this._opposite._ended) { this._done(); // No half-close, sorry if (this === this.pair.cleartext) this._opposite._done(); } } function onCryptoStreamEnd() { this._ended = true; if (this === this.pair.cleartext) { debug('cleartext.onend'); } else { debug('encrypted.onend'); } if (this.onend) this.onend(); } // NOTE: Called once `this._opposite` is set. CryptoStream.prototype.init = function init() { var self = this; this._opposite.on('sslOutEnd', function() { if (self._sslOutCb) { var cb = self._sslOutCb; self._sslOutCb = null; cb(null); } }); }; CryptoStream.prototype._write = function write(data, encoding, cb) { assert(this._pending === null); // Black-hole data if (!this.pair.ssl) return cb(null); // When resuming session don't accept any new data. // And do not put too much data into openssl, before writing it from encrypted // side. // // TODO(indutny): Remove magic number, use watermark based limits if (!this._resumingSession && this._opposite._internallyPendingBytes() < 128 * 1024) { // Write current buffer now var written; if (this === this.pair.cleartext) { debug('cleartext.write called with ' + data.length + ' bytes'); written = this.pair.ssl.clearIn(data, 0, data.length); } else { debug('encrypted.write called with ' + data.length + ' bytes'); written = this.pair.ssl.encIn(data, 0, data.length); } // Handle and report errors if (this.pair.ssl && this.pair.ssl.error) { return cb(this.pair.error(true)); } // Force SSL_read call to cycle some states/data inside OpenSSL this.pair.cleartext.read(0); // Cycle encrypted data if (this.pair.encrypted._internallyPendingBytes()) this.pair.encrypted.read(0); // Get NPN and Server name when ready this.pair.maybeInitFinished(); // Whole buffer was written if (written === data.length) { if (this === this.pair.cleartext) { debug('cleartext.write succeed with ' + written + ' bytes'); } else { debug('encrypted.write succeed with ' + written + ' bytes'); } // Invoke callback only when all data read from opposite stream if (this._opposite._halfRead) { assert(this._sslOutCb === null); this._sslOutCb = cb; } else { cb(null); } return; } else if (written !== 0 && written !== -1) { assert(!this._retryAfterPartial); this._retryAfterPartial = true; this._write(data.slice(written), encoding, cb); this._retryAfterPartial = false; return; } } else { debug('cleartext.write queue is full'); // Force SSL_read call to cycle some states/data inside OpenSSL this.pair.cleartext.read(0); } // No write has happened this._pending = data; this._pendingEncoding = encoding; this._pendingCallback = cb; if (this === this.pair.cleartext) { debug('cleartext.write queued with ' + data.length + ' bytes'); } else { debug('encrypted.write queued with ' + data.length + ' bytes'); } }; CryptoStream.prototype._writePending = function writePending() { var data = this._pending, encoding = this._pendingEncoding, cb = this._pendingCallback; this._pending = null; this._pendingEncoding = ''; this._pendingCallback = null; this._write(data, encoding, cb); }; CryptoStream.prototype._read = function read(size) { // XXX: EOF?! if (!this.pair.ssl) return this.push(null); // Wait for session to be resumed // Mark that we're done reading, but don't provide data or EOF if (this._resumingSession || !this._reading) return this.push(''); var out; if (this === this.pair.cleartext) { debug('cleartext.read called with ' + size + ' bytes'); out = this.pair.ssl.clearOut; } else { debug('encrypted.read called with ' + size + ' bytes'); out = this.pair.ssl.encOut; } var bytesRead = 0, start = this._buffer.offset, last = start; do { assert(last === this._buffer.offset); var read = this._buffer.use(this.pair.ssl, out, size - bytesRead); if (read > 0) { bytesRead += read; } last = this._buffer.offset; // Handle and report errors if (this.pair.ssl && this.pair.ssl.error) { this.pair.error(); break; } } while (read > 0 && !this._buffer.isFull && bytesRead < size && this.pair.ssl !== null); // Get NPN and Server name when ready this.pair.maybeInitFinished(); // Create new buffer if previous was filled up var pool = this._buffer.pool; if (this._buffer.isFull) this._buffer.create(); assert(bytesRead >= 0); if (this === this.pair.cleartext) { debug('cleartext.read succeed with ' + bytesRead + ' bytes'); } else { debug('encrypted.read succeed with ' + bytesRead + ' bytes'); } // Try writing pending data if (this._pending !== null) this._writePending(); if (this._opposite._pending !== null) this._opposite._writePending(); if (bytesRead === 0) { // EOF when cleartext has finished and we have nothing to read if (this._opposite._finished && this._internallyPendingBytes() === 0 || this.pair.ssl && this.pair.ssl.receivedShutdown) { // Perform graceful shutdown this._done(); // No half-open, sorry! if (this === this.pair.cleartext) { this._opposite._done(); // EOF this.push(null); } else if (!this.pair.ssl || !this.pair.ssl.receivedShutdown) { // EOF this.push(null); } } else { // Bail out this.push(''); } } else { // Give them requested data if (this.ondata) { this.ondata(pool, start, start + bytesRead); // Force state.reading to set to false this.push(''); // Try reading more, we most likely have some data this.read(0); } else { this.push(pool.slice(start, start + bytesRead)); } } // Let users know that we've some internal data to read var halfRead = this._internallyPendingBytes() !== 0; // Smart check to avoid invoking 'sslOutEnd' in the most of the cases if (this._halfRead !== halfRead) { this._halfRead = halfRead; // Notify listeners about internal data end if (!halfRead) { if (this === this.pair.cleartext) { debug('cleartext.sslOutEnd'); } else { debug('encrypted.sslOutEnd'); } this.emit('sslOutEnd'); } } }; CryptoStream.prototype.setTimeout = function(timeout, callback) { if (this.socket) this.socket.setTimeout(timeout, callback); }; CryptoStream.prototype.setNoDelay = function(noDelay) { if (this.socket) this.socket.setNoDelay(noDelay); }; CryptoStream.prototype.setKeepAlive = function(enable, initialDelay) { if (this.socket) this.socket.setKeepAlive(enable, initialDelay); }; CryptoStream.prototype.__defineGetter__('bytesWritten', function() { return this.socket ? this.socket.bytesWritten : 0; }); // Example: // C=US\nST=CA\nL=SF\nO=Joyent\nOU=Node.js\nCN=ca1\nemailAddress=ry@clouds.org function parseCertString(s) { var out = {}; var parts = s.split('\n'); for (var i = 0, len = parts.length; i < len; i++) { var sepIndex = parts[i].indexOf('='); if (sepIndex > 0) { var key = parts[i].slice(0, sepIndex); var value = parts[i].slice(sepIndex + 1); if (key in out) { if (!Array.isArray(out[key])) { out[key] = [out[key]]; } out[key].push(value); } else { out[key] = value; } } } return out; } CryptoStream.prototype.getPeerCertificate = function() { if (this.pair.ssl) { var c = this.pair.ssl.getPeerCertificate(); if (c) { if (c.issuer) c.issuer = parseCertString(c.issuer); if (c.subject) c.subject = parseCertString(c.subject); return c; } } return null; }; CryptoStream.prototype.getSession = function() { if (this.pair.ssl) { return this.pair.ssl.getSession(); } return null; }; CryptoStream.prototype.isSessionReused = function() { if (this.pair.ssl) { return this.pair.ssl.isSessionReused(); } return null; }; CryptoStream.prototype.getCipher = function(err) { if (this.pair.ssl) { return this.pair.ssl.getCurrentCipher(); } else { return null; } }; CryptoStream.prototype.end = function(chunk, encoding) { if (this === this.pair.cleartext) { debug('cleartext.end'); } else { debug('encrypted.end'); } // Write pending data first if (this._pending !== null) this._writePending(); this.writable = false; stream.Duplex.prototype.end.call(this, chunk, encoding); }; CryptoStream.prototype.destroySoon = function(err) { if (this === this.pair.cleartext) { debug('cleartext.destroySoon'); } else { debug('encrypted.destroySoon'); } if (this.writable) this.end(); if (this._writableState.finished && this._opposite._ended) { this.destroy(); } else { // Wait for both `finish` and `end` events to ensure that all data that // was written on this side was read from the other side. var self = this; var waiting = 1; this._opposite.once('end', finish); if (!this._finished) { this.once('finish', finish); ++waiting; } } function finish() { if (--waiting === 0) self.destroy(); } }; CryptoStream.prototype.destroy = function(err) { if (this._destroyed) return; this._destroyed = true; this.readable = this.writable = false; // Destroy both ends if (this === this.pair.cleartext) { debug('cleartext.destroy'); } else { debug('encrypted.destroy'); } this._opposite.destroy(); var self = this; process.nextTick(function() { // Force EOF self.push(null); // Emit 'close' event self.emit('close', err ? true : false, err, true); // eventName, hadError, error, destroyNow }); }; CryptoStream.prototype._done = function() { this._doneFlag = true; if (this === this.pair.encrypted && !this.pair._secureEstablished) return this.pair.error(); if (this.pair.cleartext._doneFlag && this.pair.encrypted._doneFlag && !this.pair._doneFlag) { // If both streams are done: this.pair.destroy(); } }; // readyState is deprecated. Don't use it. Object.defineProperty(CryptoStream.prototype, 'readyState', { get: function() { if (this._connecting) { return 'opening'; } else if (this.readable && this.writable) { return 'open'; } else if (this.readable && !this.writable) { return 'readOnly'; } else if (!this.readable && this.writable) { return 'writeOnly'; } else { return 'closed'; } } }); function CleartextStream(pair, options) { CryptoStream.call(this, pair, options); // This is a fake kludge to support how the http impl sits // on top of net Sockets var self = this; this._handle = { readStop: function() { self._reading = false; }, readStart: function() { if (self._reading && self._readableState.length > 0) return; self._reading = true; self.read(0); if (self._opposite.readable) self._opposite.read(0); } }; } util.inherits(CleartextStream, CryptoStream); CleartextStream.prototype._internallyPendingBytes = function() { if (this.pair.ssl) { return this.pair.ssl.clearPending(); } else { return 0; } }; CleartextStream.prototype.address = function() { return this.socket && this.socket.address(); }; CleartextStream.prototype.__defineGetter__('remoteAddress', function() { return this.socket && this.socket.remoteAddress; }); CleartextStream.prototype.__defineGetter__('remotePort', function() { return this.socket && this.socket.remotePort; }); function EncryptedStream(pair, options) { CryptoStream.call(this, pair, options); } util.inherits(EncryptedStream, CryptoStream); EncryptedStream.prototype._internallyPendingBytes = function() { if (this.pair.ssl) { return this.pair.ssl.encPending(); } else { return 0; } }; function onhandshakestart() { debug('onhandshakestart'); var self = this; var ssl = self.ssl; var now = Timer.now(); assert(now >= ssl.lastHandshakeTime); if ((now - ssl.lastHandshakeTime) >= exports.CLIENT_RENEG_WINDOW * 1000) { ssl.handshakes = 0; } var first = (ssl.lastHandshakeTime === 0); ssl.lastHandshakeTime = now; if (first) return; if (++ssl.handshakes > exports.CLIENT_RENEG_LIMIT) { // Defer the error event to the next tick. We're being called from OpenSSL's // state machine and OpenSSL is not re-entrant. We cannot allow the user's // callback to destroy the connection right now, it would crash and burn. setImmediate(function() { var err = new Error('TLS session renegotiation attack detected.'); if (self.cleartext) self.cleartext.emit('error', err); }); } } function onhandshakedone() { // for future use debug('onhandshakedone'); } function onclienthello(hello) { var self = this, once = false; this._resumingSession = true; function callback(err, session) { if (once) return; once = true; if (err) return self.socket.destroy(err); self.ssl.loadSession(session); // Cycle data self._resumingSession = false; self.cleartext.read(0); self.encrypted.read(0); } if (hello.sessionId.length <= 0 || !this.server || !this.server.emit('resumeSession', hello.sessionId, callback)) { callback(null, null); } } function onnewsession(key, session) { if (!this.server) return; this.server.emit('newSession', key, session); } /** * Provides a pair of streams to do encrypted communication. */ function SecurePair(credentials, isServer, requestCert, rejectUnauthorized, options) { if (!(this instanceof SecurePair)) { return new SecurePair(credentials, isServer, requestCert, rejectUnauthorized, options); } var self = this; options || (options = {}); events.EventEmitter.call(this); this.server = options.server; this._secureEstablished = false; this._isServer = isServer ? true : false; this._encWriteState = true; this._clearWriteState = true; this._doneFlag = false; this._destroying = false; if (!credentials) { this.credentials = crypto.createCredentials(); } else { this.credentials = credentials; } if (!this._isServer) { // For clients, we will always have either a given ca list or be using // default one requestCert = true; } this._rejectUnauthorized = rejectUnauthorized ? true : false; this._requestCert = requestCert ? true : false; this.ssl = new Connection(this.credentials.context, this._isServer ? true : false, this._isServer ? this._requestCert : options.servername, this._rejectUnauthorized); if (this._isServer) { this.ssl.onhandshakestart = onhandshakestart.bind(this); this.ssl.onhandshakedone = onhandshakedone.bind(this); this.ssl.onclienthello = onclienthello.bind(this); this.ssl.onnewsession = onnewsession.bind(this); this.ssl.lastHandshakeTime = 0; this.ssl.handshakes = 0; } if (process.features.tls_sni) { if (this._isServer && options.SNICallback) { this.ssl.setSNICallback(options.SNICallback); } this.servername = null; } if (process.features.tls_npn && options.NPNProtocols) { this.ssl.setNPNProtocols(options.NPNProtocols); this.npnProtocol = null; } // PSK if (options.pskClientCallback) { this.ssl.setPskClientCallback(options.pskClientCallback); } /* Acts as a r/w stream to the cleartext side of the stream. */ this.cleartext = new CleartextStream(this, options.cleartext); /* Acts as a r/w stream to the encrypted side of the stream. */ this.encrypted = new EncryptedStream(this, options.encrypted); /* Let streams know about each other */ this.cleartext._opposite = this.encrypted; this.encrypted._opposite = this.cleartext; this.cleartext.init(); this.encrypted.init(); process.nextTick(function() { /* The Connection may be destroyed by an abort call */ if (self.ssl) { self.ssl.start(); /* In case of cipher suite failures - SSL_accept/SSL_connect may fail */ if (self.ssl && self.ssl.error) self.error(); } }); } util.inherits(SecurePair, events.EventEmitter); exports.createSecurePair = function(credentials, isServer, requestCert, rejectUnauthorized, pskCallback) { var pair = new SecurePair(credentials, isServer, requestCert, rejectUnauthorized, pskCallback ? { pskClientCallback: pskCallback } : null); return pair; }; SecurePair.prototype.maybeInitFinished = function() { if (this.ssl && !this._secureEstablished && this.ssl.isInitFinished()) { if (process.features.tls_npn) { this.npnProtocol = this.ssl.getNegotiatedProtocol(); } if (process.features.tls_sni) { this.servername = this.ssl.getServername(); } this._secureEstablished = true; debug('secure established'); this.emit('secure'); } }; SecurePair.prototype.destroy = function() { if (this._destroying) return; if (!this._doneFlag) { debug('SecurePair.destroy'); this._destroying = true; // SecurePair should be destroyed only after it's streams this.cleartext.destroy(); this.encrypted.destroy(); this._doneFlag = true; this.ssl.error = null; this.ssl.close(); this.ssl = null; } }; SecurePair.prototype.error = function(returnOnly) { var err = this.ssl.error; this.ssl.error = null; if (!this._secureEstablished) { // Emit ECONNRESET instead of zero return if (!err || err.message === 'ZERO_RETURN') { var connReset = new Error('socket hang up'); connReset.code = 'ECONNRESET'; connReset.sslError = err && err.message; err = connReset; } this.destroy(); if (!returnOnly) this.emit('error', err); } else if (this._isServer && this._rejectUnauthorized && /peer did not return a certificate/.test(err.message)) { // Not really an error. this.destroy(); } else { if (!returnOnly) this.cleartext.emit('error', err); } return err; }; // TODO: support anonymous (nocert) // AUTHENTICATION MODES // // There are several levels of authentication that TLS/SSL supports. // Read more about this in "man SSL_set_verify". // // 1. The server sends a certificate to the client but does not request a // cert from the client. This is common for most HTTPS servers. The browser // can verify the identity of the server, but the server does not know who // the client is. Authenticating the client is usually done over HTTP using // login boxes and cookies and stuff. // // 2. The server sends a cert to the client and requests that the client // also send it a cert. The client knows who the server is and the server is // requesting the client also identify themselves. There are several // outcomes: // // A) verifyError returns null meaning the client's certificate is signed // by one of the server's CAs. The server know's the client idenity now // and the client is authorized. // // B) For some reason the client's certificate is not acceptable - // verifyError returns a string indicating the problem. The server can // either (i) reject the client or (ii) allow the client to connect as an // unauthorized connection. // // The mode is controlled by two boolean variables. // // requestCert // If true the server requests a certificate from client connections. For // the common HTTPS case, users will want this to be false, which is what // it defaults to. // // rejectUnauthorized // If true clients whose certificates are invalid for any reason will not // be allowed to make connections. If false, they will simply be marked as // unauthorized but secure communication will continue. By default this is // true. // // // // Options: // - requestCert. Send verify request. Default to false. // - rejectUnauthorized. Boolean, default to true. // - key. string. // - cert: string. // - ca: string or array of strings. // // emit 'secureConnection' // function (cleartextStream, encryptedStream) { } // // 'cleartextStream' has the boolean property 'authorized' to determine if // it was verified by the CA. If 'authorized' is false, a property // 'authorizationError' is set on cleartextStream and has the possible // values: // // "UNABLE_TO_GET_ISSUER_CERT", "UNABLE_TO_GET_CRL", // "UNABLE_TO_DECRYPT_CERT_SIGNATURE", "UNABLE_TO_DECRYPT_CRL_SIGNATURE", // "UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY", "CERT_SIGNATURE_FAILURE", // "CRL_SIGNATURE_FAILURE", "CERT_NOT_YET_VALID" "CERT_HAS_EXPIRED", // "CRL_NOT_YET_VALID", "CRL_HAS_EXPIRED" "ERROR_IN_CERT_NOT_BEFORE_FIELD", // "ERROR_IN_CERT_NOT_AFTER_FIELD", "ERROR_IN_CRL_LAST_UPDATE_FIELD", // "ERROR_IN_CRL_NEXT_UPDATE_FIELD", "OUT_OF_MEM", // "DEPTH_ZERO_SELF_SIGNED_CERT", "SELF_SIGNED_CERT_IN_CHAIN", // "UNABLE_TO_GET_ISSUER_CERT_LOCALLY", "UNABLE_TO_VERIFY_LEAF_SIGNATURE", // "CERT_CHAIN_TOO_LONG", "CERT_REVOKED" "INVALID_CA", // "PATH_LENGTH_EXCEEDED", "INVALID_PURPOSE" "CERT_UNTRUSTED", // "CERT_REJECTED" // // // TODO: // cleartext.credentials (by mirroring from pair object) // cleartext.getCertificate() (by mirroring from pair.credentials.context) function Server(/* [options], listener */) { var options, listener; if (typeof arguments[0] == 'object') { options = arguments[0]; listener = arguments[1]; } else if (typeof arguments[0] == 'function') { options = {}; listener = arguments[0]; } if (!(this instanceof Server)) return new Server(options, listener); this._contexts = []; var self = this; // Handle option defaults: this.setOptions(options); if (!self.isPskServer && !self.pfx && (!self.cert || !self.key)) { throw new Error('Missing PFX or certificate + private key and is not PSK.'); } var sharedCreds = crypto.createCredentials({ pfx: self.pfx, key: self.key, passphrase: self.passphrase, cert: self.cert, ca: self.ca, ciphers: self.ciphers || DEFAULT_CIPHERS, secureProtocol: self.secureProtocol, secureOptions: self.secureOptions, crl: self.crl, sessionIdContext: self.sessionIdContext, pskServerCallback: self.pskCallback, pskServerHint: self.pskHint }); var timeout = options.handshakeTimeout || (120 * 1000); if (typeof timeout !== 'number') { throw new TypeError('handshakeTimeout must be a number'); } // constructor call net.Server.call(this, function(socket) { var connOps = { secureProtocol: self.secureProtocol, secureOptions: self.secureOptions }; var creds = crypto.createCredentials(connOps, sharedCreds.context); var pair = new SecurePair(creds, true, self.requestCert, self.rejectUnauthorized, { server: self, NPNProtocols: self.NPNProtocols, //setting here as even with PSK default cb is called //see node_crypto.cc:1161:int Connection::SelectSNIContextCallback_(SSL* s, int* ad, void* arg) SNICallback: self.isPskServer ? null : self.SNICallback, // Stream options cleartext: self._cleartext, encrypted: self._encrypted }); var cleartext = pipe(pair, socket); cleartext._controlReleased = false; function listener() { pair.emit('error', new Error('TLS handshake timeout')); } if (timeout > 0) { socket.setTimeout(timeout, listener); } pair.once('secure', function() { socket.setTimeout(0, listener); pair.cleartext.authorized = false; pair.cleartext.npnProtocol = pair.npnProtocol; pair.cleartext.servername = pair.servername; if (pair.ssl.pskIdentity) { debug('psk identity provided'); pair.cleartext.pskIdentity = pair.ssl.pskIdentity; pair.cleartext.authorized = true; cleartext._controlReleased = true; self.emit('secureConnection', pair.cleartext, pair.encrypted); } else { if (!self.requestCert) { cleartext._controlReleased = true; self.emit('secureConnection', pair.cleartext, pair.encrypted); } else { var verifyError = pair.ssl.verifyError(); if (verifyError) { pair.cleartext.authorizationError = verifyError.message; if (self.rejectUnauthorized) { socket.destroy(); pair.destroy(); } else { cleartext._controlReleased = true; self.emit('secureConnection', pair.cleartext, pair.encrypted); } } else { pair.cleartext.authorized = true; cleartext._controlReleased = true; self.emit('secureConnection', pair.cleartext, pair.encrypted); } } } }); pair.on('error', function(err) { self.emit('clientError', err, this); }); }); if (listener) { this.on('secureConnection', listener); } } util.inherits(Server, net.Server); exports.Server = Server; exports.createServer = function(options, listener) { return new Server(options, listener); }; Server.prototype.setOptions = function(options) { if (typeof options.requestCert == 'boolean') { this.requestCert = options.requestCert; } else { this.requestCert = false; } if (typeof options.rejectUnauthorized == 'boolean') { this.rejectUnauthorized = options.rejectUnauthorized; } else { this.rejectUnauthorized = false; } if (options.pskCallback && !options.ciphers) { // set default PSK ciphers if it looks like we're trying to use // PSK but no preference has been specified debug('using PSK and setting default ciphers'); options.ciphers = DEFAULT_CIPHERS; } if (options.pskCallback) { this.pskCallback = options.pskCallback; this.isPskServer = true; } if (options.pskHint) this.pskHint = options.pskHint; if (options.pfx) this.pfx = options.pfx; if (options.key) this.key = options.key; if (options.passphrase) this.passphrase = options.passphrase; if (options.cert) this.cert = options.cert; if (options.ca) this.ca = options.ca; if (options.secureProtocol) this.secureProtocol = options.secureProtocol; if (options.crl) this.crl = options.crl; if (options.ciphers) this.ciphers = options.ciphers; var secureOptions = crypto._getSecureOptions(options.secureProtocol, options.secureOptions); if (options.honorCipherOrder) { secureOptions |= constants.SSL_OP_CIPHER_SERVER_PREFERENCE; } this.secureOptions = secureOptions; if (options.NPNProtocols) convertNPNProtocols(options.NPNProtocols, this); if (options.SNICallback) { this.SNICallback = options.SNICallback; } else { this.SNICallback = this.SNICallback.bind(this); } if (options.sessionIdContext) { this.sessionIdContext = options.sessionIdContext; } else if (this.requestCert) { this.sessionIdContext = crypto.createHash('md5') .update(process.argv.join(' ')) .digest('hex'); } if (options.cleartext) this.cleartext = options.cleartext; if (options.encrypted) this.encrypted = options.encrypted; }; // SNI Contexts High-Level API Server.prototype.addContext = function(servername, credentials) { if (!servername) { throw 'Servername is required parameter for Server.addContext'; } var re = new RegExp('^' + servername.replace(/([\.^$+?\-\\[\]{}])/g, '\\$1') .replace(/\*/g, '.*') + '$'); this._contexts.push([re, crypto.createCredentials(credentials).context]); }; Server.prototype.SNICallback = function(servername) { var ctx; this._contexts.some(function(elem) { if (servername.match(elem[0]) !== null) { ctx = elem[1]; return true; } }); return ctx; }; // Target API: // // var s = tls.connect({port: 8000, host: "google.com"}, function() { // if (!s.authorized) { // s.destroy(); // return; // } // // // s.socket; // // s.end("hello world\n"); // }); // // function normalizeConnectArgs(listArgs) { var args = net._normalizeConnectArgs(listArgs); var options = args[0]; var cb = args[1]; if (typeof listArgs[1] === 'object') { options = util._extend(options, listArgs[1]); } else if (typeof listArgs[2] === 'object') { options = util._extend(options, listArgs[2]); } return (cb) ? [options, cb] : [options]; } exports.connect = function(/* [port, host], options, cb */) { var args = normalizeConnectArgs(arguments); var options = args[0]; var cb = args[1]; var defaults = { rejectUnauthorized: '0' !== process.env.NODE_TLS_REJECT_UNAUTHORIZED }; options = util._extend(defaults, options || {}); options.secureOptions = crypto._getSecureOptions(options.secureProtocol, options.secureOptions); var hasPskCallback = !!(options.pskClientCallback); var isPskIdentity = !!(options.pskIdentity && options.pskKey); // if a PSK identity/key pair was provided, translate it into the // callback expected by SecurePair if (isPskIdentity) { debug('### we are working with psk'); if (!hasPskCallback) { options.pskClientCallback = function (hint) { return { identity: options.pskIdentity, key: options.pskKey } }; hasPskCallback = true; } else { debug('both a pskClientCallback and (pskIdentity&pskKey) provided - which is illogical'); debug('at this point - only the pskClientCallback is going to be used.') } } if (hasPskCallback && !options.ciphers) { // set default PSK ciphers if it looks like we're trying to use // PSK but no preference has been specified debug('### using Default ciphers... '); options.ciphers = DEFAULT_CIPHERS; } var socket = options.socket ? options.socket : new net.Stream(); var sslcontext = crypto.createCredentials(options); var NPN = {}; convertNPNProtocols(options.NPNProtocols, NPN); var hostname = options.servername || options.host || 'localhost', pair = new SecurePair(sslcontext, false, true, options.rejectUnauthorized === true ? true : false, { NPNProtocols: NPN.NPNProtocols, servername: hostname, cleartext: options.cleartext, encrypted: options.encrypted, pskClientCallback: options.pskClientCallback }); if (options.session) { var session = options.session; if (typeof session === 'string') session = new Buffer(session, 'binary'); pair.ssl.setSession(session); } var cleartext = pipe(pair, socket); if (cb) { cleartext.once('secureConnect', cb); } if (!options.socket) { var connect_opt = (options.path && !options.port) ? { path: options.path } : { port: options.port, host: options.host, localAddress: options.localAddress }; socket.connect(connect_opt); } pair.on('secure', function() { cleartext.npnProtocol = pair.npnProtocol; if (hasPskCallback) { cleartext.pskIdentity = pair.ssl.pskIdentity; cleartext.authorized = true; cleartext.emit('secureConnect'); } else { var verifyError = pair.ssl.verifyError(); // Verify that server's identity matches it's certificate's names if (!verifyError) { var validCert = checkServerIdentity(hostname, pair.cleartext.getPeerCertificate()); if (!validCert) { verifyError = new Error('Hostname/IP doesn\'t match certificate\'s ' + 'altnames'); } } if (verifyError) { cleartext.authorized = false; cleartext.authorizationError = verifyError.message; if (pair._rejectUnauthorized) { cleartext.emit('error', verifyError); pair.destroy(); } else { cleartext.emit('secureConnect'); } } else { cleartext.authorized = true; cleartext.emit('secureConnect'); } } }); pair.on('error', function(err) { cleartext.emit('error', err); }); cleartext._controlReleased = true; return cleartext; }; function pipe(pair, socket) { pair.encrypted.pipe(socket); socket.pipe(pair.encrypted); pair.encrypted.on('close', function(hadError, error, destroyNow) { process.nextTick(function() { // Encrypted should be unpiped from socket to prevent possible // write after destroy. pair.encrypted.unpipe(socket); if (destroyNow) { socket.destroy(error); } else { socket.destroySoon(); } }); }); pair.fd = socket.fd; var cleartext = pair.cleartext; cleartext.socket = socket; cleartext.encrypted = pair.encrypted; cleartext.authorized = false; // cycle the data whenever the socket drains, so that // we can pull some more into it. normally this would // be handled by the fact that pipe() triggers read() calls // on writable.drain, but CryptoStreams are a bit more // complicated. Since the encrypted side actually gets // its data from the cleartext side, we have to give it a // light kick to get in motion again. socket.on('drain', function() { if (pair.encrypted._pending) pair.encrypted._writePending(); if (pair.cleartext._pending) pair.cleartext._writePending(); pair.encrypted.read(0); pair.cleartext.read(0); }); function onerror(e) { if (cleartext._controlReleased) { cleartext.emit('error', e); } } function onclose() { socket.removeListener('error', onerror); socket.removeListener('timeout', ontimeout); } function ontimeout() { cleartext.emit('timeout'); } socket.on('error', onerror); socket.on('close', onclose); socket.on('timeout', ontimeout); return cleartext; } // Copyright & License details are available under JXCORE_LICENSE file var Timer = process.binding('timer_wrap').Timer; var L = require('_linklist'); var assert = require('assert').ok; // Timeout values > TIMEOUT_MAX are set to 1. var TIMEOUT_MAX = 2147483647; // 2^31-1 var debug; if (process.env.NODE_DEBUG && /timer/.test(process.env.NODE_DEBUG)) { debug = function() { require('util').error.apply(this, arguments); }; } else { debug = function() { }; } // IDLE TIMEOUTS // // Because often many sockets will have the same idle timeout we will not // use one timeout watcher per item. It is too much overhead. Instead // we'll use a single watcher for all sockets with the same timeout value // and a linked list. This technique is described in the libev manual: // http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#Be_smart_about_timeouts // Object containing all lists, timers // key = time in milliseconds // value = list var lists = {}; // the main function - creates lists on demand and the watchers associated // with them. function insert(item, msecs) { item._idleStart = Date.now(); item._monotonicStartTime = Timer.now(); item._idleTimeout = msecs; if (msecs < 0) return; var list; if (lists[msecs]) { list = lists[msecs]; } else { list = new Timer(); list.start(msecs, 0); L.init(list); lists[msecs] = list; list.msecs = msecs; list.ontimeout = listOnTimeout; } L.append(list, item); assert(!L.isEmpty(list)); // list is not empty } function listOnTimeout() { var msecs = this.msecs; var list = this; debug('timeout callback ' + msecs); var now = Timer.now(); var js_now = Date.now(); // now's value has been updated, consider that it doesn't need to be updated // unless a timer is added within the loop that processes the timers list // below list._addedTimer = false; debug('now: %d', now); var first; while (first = L.peek(list)) { // If the previous iteration caused a timer to be added, // update the value of "now" so that timing computations are // done correctly. See test/simple/test-timers-blocking-callback.js // for more information. if (list._addedTimer) { var js_next = Date.now(); var update_time = false; if (js_next > js_now) { var tmp = Timer.now(); // match Timer.now and Date.now if (tmp > now && tmp >= js_next) { update_time = true; now = tmp; debug('now: %d', now); } } if (update_time) { js_now = js_next; list._addedTimer = false; } } var diff = now - first._monotonicStartTime; if (diff < msecs) { list.start(msecs - diff, 0); debug(msecs + ' list wait because diff is ' + diff); return; } else { L.remove(first); assert(first !== L.peek(list)); if (!first._onTimeout) continue; // v0.4 compatibility: if the timer callback throws and the // domain or uncaughtException handler ignore the exception, // other timers that expire on this tick should still run. // // https://github.com/joyent/node/issues/2631 var domain = first.domain; if (domain && domain._disposed) continue; try { if (domain) domain.enter(); var threw = true; first._onTimeout(); if (domain) domain.exit(); threw = false; } finally { if (threw) { // We need to continue processing after domain error handling // is complete, but not by using whatever domain was left over // when the timeout threw its exception. var oldDomain = process.domain; process.domain = null; process.nextTick(function() { list.ontimeout(); }); process.domain = oldDomain; } } } } debug(msecs + ' list empty'); assert(L.isEmpty(list)); list.close(); delete lists[msecs]; } var unenroll = exports.unenroll = function(item) { L.remove(item); var list = lists[item._idleTimeout]; // if empty then stop the watcher debug('unenroll'); if (list && L.isEmpty(list)) { debug('unenroll: list empty'); list.close(); delete lists[item._idleTimeout]; } // if active is called later, then we want to make sure not to insert again item._idleTimeout = -1; }; // Does not start the time, just sets up the members needed. exports.enroll = function(item, msecs) { // if this item was already in a list somewhere // then we should unenroll it from that if (item._idleNext) unenroll(item); // Ensure that msecs fits into signed int32 if (msecs > 0x7fffffff) { msecs = 0x7fffffff; } item._idleTimeout = msecs; L.init(item); }; // call this whenever the item is active (not idle) // it will reset its timeout. exports.active = function(item) { var msecs = item._idleTimeout; if (msecs >= 0) { var list = lists[msecs]; if (!list || L.isEmpty(list)) { insert(item, msecs); } else { item._idleStart = Date.now(); item._monotonicStartTime = Timer.now(); L.append(list, item); } list = lists[msecs]; // Set _addedTimer so that listOnTimeout can refresh // its current time value to avoid wrong timing computation // in case timers callback block for a while. // See test/simple/test-timers-blocking-callback.js for more // details list._addedTimer = true; } }; /* * DOM-style timers */ exports.setTimeout = function(callback, after) { var timer; after *= 1; // coalesce to number or NaN after = parseInt(after); // round float to int if (!(after >= 1 && after <= TIMEOUT_MAX)) { after = 1; // schedule on next tick, follows browser behaviour } timer = new Timeout(after); if (arguments.length <= 2) { timer._onTimeout = callback; } else { /* * Sometimes setTimeout is called with arguments, EG * * setTimeout(callback, 2000, "hello", "world") * * If that's the case we need to call the callback with * those args. The overhead of an extra closure is not * desired in the normal case. */ var args = Array.prototype.slice.call(arguments, 2); timer._onTimeout = function() { callback.apply(timer, args); } } if (process.domain) timer.domain = process.domain; exports.active(timer); return timer; }; exports.clearTimeout = function(timer) { if (timer && (timer.ontimeout || timer._onTimeout)) { timer.ontimeout = timer._onTimeout = null; if (timer instanceof Timeout) { timer.close(); // for after === 0 } else { exports.unenroll(timer); } } }; exports.setInterval = function(callback, repeat) { repeat *= 1; // coalesce to number or NaN repeat = parseInt(repeat); // round float to int if (!(repeat >= 1 && repeat <= TIMEOUT_MAX)) { repeat = 1; // schedule on next tick, follows browser behaviour } var timer = new Timeout(repeat); var args = Array.prototype.slice.call(arguments, 2); timer._onTimeout = wrapper; timer._repeat = true; if (process.domain) timer.domain = process.domain; exports.active(timer); return timer; function wrapper() { callback.apply(this, args); // If callback called clearInterval(). if (timer._repeat === false) return; // If timer is unref'd (or was - it's permanently removed from the list.) if (this._handle) { this._handle.start(repeat, 0); } else { timer._idleTimeout = repeat; exports.active(timer); } } }; exports.clearInterval = function(timer) { if (timer && timer._repeat) { timer._repeat = false; clearTimeout(timer); } }; var Timeout = function(after) { this._idleTimeout = after; this._idlePrev = this; this._idleNext = this; this._idleStart = null; this._monotonicStartTime = null; this._onTimeout = null; this._repeat = false; }; function unrefdHandle() { this.owner._onTimeout(); if (!this.owner._repeat) this.owner.close(); } Timeout.prototype.unref = function() { if (this._handle) { this._handle.unref(); } else if (typeof(this._onTimeout) === 'function') { var nowMonotonic = Timer.now(); if (!this._idleStart || !this._monotonicStartTime) { this._idleStart = Date.now(); this._monotonicStartTime = nowMonotonic; } var delay = this._monotonicStartTime + this._idleTimeout - nowMonotonic; if (delay < 0) delay = 0; exports.unenroll(this); this._handle = new Timer(); this._handle.owner = this; this._handle.ontimeout = unrefdHandle; this._handle.start(delay, 0); this._handle.domain = this.domain; this._handle.unref(); } }; Timeout.prototype.ref = function() { if (this._handle) this._handle.ref(); }; Timeout.prototype.close = function() { this._onTimeout = null; if (this._handle) { this._handle.ontimeout = null; this._handle.close(); } else { exports.unenroll(this); } }; var immediateQueue = {}; L.init(immediateQueue); function processImmediate() { var immediate = L.shift(immediateQueue); if (L.isEmpty(immediateQueue)) { process._needImmediateCallback = false; } if (immediate._onImmediate) { if (immediate.domain) immediate.domain.enter(); immediate._onImmediate(); if (immediate.domain) immediate.domain.exit(); } } exports.setImmediate = function(callback) { var immediate = {}, args; L.init(immediate); immediate._onImmediate = callback; if (arguments.length > 1) { args = Array.prototype.slice.call(arguments, 1); immediate._onImmediate = function() { callback.apply(immediate, args); }; } if (!process._needImmediateCallback) { process._needImmediateCallback = true; process._immediateCallback = processImmediate; } if (process.domain) immediate.domain = process.domain; L.append(immediateQueue, immediate); return immediate; }; exports.clearImmediate = function(immediate) { if (!immediate) return; immediate._onImmediate = undefined; L.remove(immediate); if (L.isEmpty(immediateQueue)) { process._needImmediateCallback = false; } }; // Internal APIs that need timeouts should use timers._unrefActive isntead of // timers.active as internal timeouts shouldn't hold the loop open var unrefList, unrefTimer; function _makeTimerTimeout(timer) { var domain = timer.domain; var msecs = timer._idleTimeout; // Timer has been unenrolled by another timer that fired at the same time, // so don't make it timeout. if (!msecs || msecs < 0) return; if (!timer._onTimeout) return; if (domain && domain._disposed) return; try { var threw = true; if (domain) domain.enter(); debug('unreftimer firing timeout'); L.remove(timer); timer._onTimeout(); threw = false; if (domain) domain.exit(); } finally { if (threw) process.nextTick(unrefTimeout); } } function unrefTimeout() { var now = Timer.now(); debug('unrefTimer fired'); var timeSinceLastActive; var nextTimeoutTime; var nextTimeoutDuration; var minNextTimeoutTime; var timersToTimeout = []; // The actual timer fired and has not yet been rearmed, // let's consider its next firing time is invalid for now. // It may be set to a relevant time in the future once // we scanned through the whole list of timeouts and if // we find a timeout that needs to expire. unrefTimer.when = -1; // Iterate over the list of timeouts, // call the onTimeout callback for those expired, // and rearm the actual timer if the next timeout to expire // will expire before the current actual timer. var cur = unrefList._idlePrev; while (cur != unrefList) { timeSinceLastActive = now - cur._monotonicStartTime; if (timeSinceLastActive < cur._idleTimeout) { // This timer hasn't expired yet, but check if its expiring time is // earlier than the actual timer's expiring time nextTimeoutDuration = cur._idleTimeout - timeSinceLastActive; nextTimeoutTime = now + nextTimeoutDuration; if (minNextTimeoutTime == null || (nextTimeoutTime < minNextTimeoutTime)) { // We found a timeout that will expire earlier, // store its next timeout time now so that we // can rearm the actual timer accordingly when // we scanned through the whole list. minNextTimeoutTime = nextTimeoutTime; } } else { // We found a timer that expired. Do not call its _onTimeout callback // right now, as it could mutate any item of the list (including itself). // Instead, add it to another list that will be processed once the list // of current timers has been fully traversed. timersToTimeout.push(cur); } cur = cur._idlePrev; } var nbTimersToTimeout = timersToTimeout.length; for (var timerIdx = 0; timerIdx < nbTimersToTimeout; ++timerIdx) _makeTimerTimeout(timersToTimeout[timerIdx]); // Rearm the actual timer with the timeout delay // of the earliest timeout found. if (minNextTimeoutTime != null) { unrefTimer.start(minNextTimeoutTime - now, 0); unrefTimer.when = minNextTimeoutTime; debug('unrefTimer rescheduled'); } else if (L.isEmpty(unrefList)) { debug('unrefList is empty'); } } exports._unrefActive = function(item) { var msecs = item._idleTimeout; if (!msecs || msecs < 0) return; assert(msecs >= 0); L.remove(item); if (!unrefList) { debug('unrefList initialized'); unrefList = {}; L.init(unrefList); debug('unrefTimer initialized'); unrefTimer = new Timer(); unrefTimer.unref(); unrefTimer.when = -1; unrefTimer.ontimeout = unrefTimeout; } var nowDate = Date.now(); var nowMonotonicTimestamp = Timer.now(); item._idleStart = nowDate; item._monotonicStartTime = nowMonotonicTimestamp; var when = nowMonotonicTimestamp + msecs; // If the actual timer is set to fire too late, or not set to fire at all, // we need to make it fire earlier if (unrefTimer.when === -1 || unrefTimer.when > when) { unrefTimer.start(msecs, 0); unrefTimer.when = when; debug('unrefTimer scheduled'); } debug('unrefList append to end'); L.append(unrefList, item); }; // Copyright & License details are available under JXCORE_LICENSE file // the sys module was renamed to 'util'. // this shim remains to keep old programs working. module.exports = require('util'); // Copyright & License details are available under JXCORE_LICENSE file function assertEncoding(encoding) { if (encoding && !Buffer.isEncoding(encoding)) { throw new Error('Unknown encoding: ' + encoding); } } // StringDecoder provides an interface for efficiently splitting a series of // buffers into a series of JS strings without breaking apart multi-byte // characters. CESU-8 is handled as part of the UTF-8 encoding. // // @TODO Handling all encodings inside a single object makes it very difficult // to reason about this code, so it should be split up in the future. // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code // points as used by CESU-8. var StringDecoder = exports.StringDecoder = function(encoding) { this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); assertEncoding(encoding); switch (this.encoding) { case 'utf8': // CESU-8 represents each of Surrogate Pair by 3-bytes this.surrogateSize = 3; break; case 'ucs2': case 'utf16le': // UTF-16 represents each of Surrogate Pair by 2-bytes this.surrogateSize = 2; this.detectIncompleteChar = utf16DetectIncompleteChar; break; case 'base64': // Base-64 stores 3 bytes in 4 chars, and pads the remainder. this.surrogateSize = 3; this.detectIncompleteChar = base64DetectIncompleteChar; break; default: this.write = passThroughWrite; return; } // Enough space to store all bytes of a single character. UTF-8 needs 4 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). this.charBuffer = new Buffer(6); // Number of bytes received for the current incomplete multi-byte character. this.charReceived = 0; // Number of bytes expected for the current incomplete multi-byte character. this.charLength = 0; }; // write decodes the given buffer and returns it as JS string that is // guaranteed to not contain any partial multi-byte characters. Any partial // character found at the end of the buffer is buffered up, and will be // returned when calling write again with the remaining bytes. // // Note: Converting a Buffer containing an orphan surrogate to a String // currently works, but converting a String to a Buffer (via `new Buffer`, or // Buffer#write) will replace incomplete surrogates with the unicode // replacement character. See https://codereview.chromium.org/121173009/ . StringDecoder.prototype.write = function(buffer) { var charStr = ''; // if our last write ended with an incomplete multibyte character while (this.charLength) { // determine how many remaining bytes this buffer has to offer for this char var available = (buffer.length >= this.charLength - this.charReceived) ? this.charLength - this.charReceived : buffer.length; // add the new bytes to the char buffer buffer.copy(this.charBuffer, this.charReceived, 0, available); this.charReceived += available; if (this.charReceived < this.charLength) { // still not enough chars in this buffer? wait for more ... return ''; } // remove bytes belonging to the current character from the buffer buffer = buffer.slice(available, buffer.length); // get the character that was split charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character var charCode = charStr.charCodeAt(charStr.length - 1); if (charCode >= 0xD800 && charCode <= 0xDBFF) { this.charLength += this.surrogateSize; charStr = ''; continue; } this.charReceived = this.charLength = 0; // if there are no more bytes in this buffer, just emit our char if (buffer.length === 0) { return charStr; } break; } // determine and set charLength / charReceived this.detectIncompleteChar(buffer); var end = buffer.length; if (this.charLength) { // buffer the incomplete character bytes we got buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); end -= this.charReceived; } charStr += buffer.toString(this.encoding, 0, end); var end = charStr.length - 1; var charCode = charStr.charCodeAt(end); // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character if (charCode >= 0xD800 && charCode <= 0xDBFF) { var size = this.surrogateSize; this.charLength += size; this.charReceived += size; this.charBuffer.copy(this.charBuffer, size, 0, size); buffer.copy(this.charBuffer, 0, 0, size); return charStr.substring(0, end); } // or just emit the charStr return charStr; }; // detectIncompleteChar determines if there is an incomplete UTF-8 character at // the end of the given buffer. If so, it sets this.charLength to the byte // length that character, and sets this.charReceived to the number of bytes // that are available for this character. StringDecoder.prototype.detectIncompleteChar = function(buffer) { // determine how many bytes we have to check at the end of this buffer var i = (buffer.length >= 3) ? 3 : buffer.length; // Figure out if one of the last i bytes of our buffer announces an // incomplete char. for (; i > 0; i--) { var c = buffer[buffer.length - i]; // See http://en.wikipedia.org/wiki/UTF-8#Description // 110XXXXX if (i == 1 && c >> 5 == 0x06) { this.charLength = 2; break; } // 1110XXXX if (i <= 2 && c >> 4 == 0x0E) { this.charLength = 3; break; } // 11110XXX if (i <= 3 && c >> 3 == 0x1E) { this.charLength = 4; break; } } this.charReceived = i; }; StringDecoder.prototype.end = function(buffer) { var res = ''; if (buffer && buffer.length) res = this.write(buffer); if (this.charReceived) { var cr = this.charReceived; var buf = this.charBuffer; var enc = this.encoding; res += buf.slice(0, cr).toString(enc); } return res; }; function passThroughWrite(buffer) { return buffer.toString(this.encoding); } function utf16DetectIncompleteChar(buffer) { this.charReceived = buffer.length % 2; this.charLength = this.charReceived ? 2 : 0; } function base64DetectIncompleteChar(buffer) { this.charReceived = buffer.length % 3; this.charLength = this.charReceived ? 3 : 0; } // Copyright & License details are available under JXCORE_LICENSE file // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. module.exports = PassThrough; var Transform = require('_stream_transform'); var util = require('util'); util.inherits(PassThrough, Transform); function PassThrough(options) { if (!(this instanceof PassThrough)) return new PassThrough(options); Transform.call(this, options); } PassThrough.prototype._transform = function(chunk, encoding, cb) { cb(null, chunk); }; // Copyright & License details are available under JXCORE_LICENSE file // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where // some bits pass through, and others are simply ignored. (That would // be a valid example of a transform, of course.) // // While the output is causally related to the input, it's not a // necessarily symmetric or synchronous transformation. For example, // a zlib stream might take multiple plain-text writes(), and then // emit a single compressed chunk some time in the future. // // Here's how this works: // // The Transform stream has all the aspects of the readable and writable // stream classes. When you write(chunk), that calls _write(chunk,cb) // internally, and returns false if there's a lot of pending writes // buffered up. When you call read(), that calls _read(n) until // there's enough pending readable data buffered up. // // In a transform stream, the written data is placed in a buffer. When // _read(n) is called, it transforms the queued up data, calling the // buffered _write cb's as it consumes chunks. If consuming a single // written chunk would result in multiple output chunks, then the first // outputted bit calls the readcb, and subsequent chunks just go into // the read buffer, and will cause it to emit 'readable' if necessary. // // This way, back-pressure is actually determined by the reading side, // since _read has to be called to start processing a new chunk. However, // a pathological inflate type of transform can cause excessive buffering // here. For example, imagine a stream where every byte of input is // interpreted as an integer from 0-255, and then results in that many // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in // 1kb of data being output. In this case, you could write a very small // amount of input, and end up with a very large amount of output. In // such a pathological inflating mechanism, there'd be no way to tell // the system to stop doing the transform. A single 4MB write could // cause the system to run out of memory. // // However, even in such a pathological case, only a single written chunk // would be consumed, and then the rest would wait (un-transformed) until // the results of the previous transformed chunk were consumed. module.exports = Transform; var Duplex = require('_stream_duplex'); var util = require('util'); util.inherits(Transform, Duplex); function TransformState(options, stream) { this.afterTransform = function(er, data) { return afterTransform(stream, er, data); }; this.needTransform = false; this.transforming = false; this.writecb = null; this.writechunk = null; } function afterTransform(stream, er, data) { var ts = stream._transformState; ts.transforming = false; var cb = ts.writecb; if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); ts.writechunk = null; ts.writecb = null; if (data !== null && data !== undefined) stream.push(data); if (cb) cb(er); var rs = stream._readableState; rs.reading = false; if (rs.needReadable || rs.length < rs.highWaterMark) { stream._read(rs.highWaterMark); } } function Transform(options) { if (!(this instanceof Transform)) return new Transform(options); Duplex.call(this, options); var ts = this._transformState = new TransformState(options, this); // when the writable side finishes, then flush out anything remaining. var stream = this; // start out asking for a readable event once data is transformed. this._readableState.needReadable = true; // we have implemented the _read method, and done the other things // that Readable wants before the first _read call, so unset the // sync guard flag. this._readableState.sync = false; this.once('finish', function() { if ('function' === typeof this._flush) this._flush(function(er) { done(stream, er); }); else done(stream); }); } Transform.prototype.push = function(chunk, encoding) { this._transformState.needTransform = false; return Duplex.prototype.push.call(this, chunk, encoding); }; // This is the part where you do stuff! // override this function in implementation classes. // 'chunk' is an input chunk. // // Call `push(newChunk)` to pass along transformed output // to the readable side. You may call 'push' zero or more times. // // Call `cb(err)` when you are done with this chunk. If you pass // an error, then that'll put the hurt on the whole operation. If you // never call cb(), then you'll never get another chunk. Transform.prototype._transform = function(chunk, encoding, cb) { throw new Error('not implemented'); }; Transform.prototype._write = function(chunk, encoding, cb) { var ts = this._transformState; ts.writecb = cb; ts.writechunk = chunk; ts.writeencoding = encoding; if (!ts.transforming) { var rs = this._readableState; if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); } }; // Doesn't matter what the args are here. // _transform does all the work. // That we got here means that the readable side wants more data. Transform.prototype._read = function(n) { var ts = this._transformState; if (ts.writechunk !== null && ts.writecb && !ts.transforming) { ts.transforming = true; this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); } else { // mark that we need a transform, so that any data that comes in // will get processed, now that we've asked for it. ts.needTransform = true; } }; function done(stream, er) { if (er) return stream.emit('error', er); // if there's nothing in the write buffer, then that means // that nothing more will ever be provided var ws = stream._writableState; var rs = stream._readableState; var ts = stream._transformState; if (ws.length) throw new Error('calling transform done when ws.length != 0'); if (ts.transforming) throw new Error('calling transform done when still transforming'); return stream.push(null); } // Copyright & License details are available under JXCORE_LICENSE file module.exports = Duplex; var util = require('util'); var Readable = require('_stream_readable'); var Writable = require('_stream_writable'); util.inherits(Duplex, Readable); Object.keys(Writable.prototype).forEach(function(method) { if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; }); function Duplex(options) { if (!(this instanceof Duplex)) return new Duplex(options); Readable.call(this, options); Writable.call(this, options); if (options && options.readable === false) this.readable = false; if (options && options.writable === false) this.writable = false; this.allowHalfOpen = true; if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; this.once('end', onend); } // the no-half-open enforcer function onend() { // if we allow half-open state, or if the writable side ended, // then we're ok. if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written. // But allow more writes to happen in this tick. process.nextTick(this.end.bind(this)); } // Copyright & License details are available under JXCORE_LICENSE file // A bit simpler than readable streams. // Implement an async ._write(chunk, cb), and it'll handle all // the drain event emission and buffering. module.exports = Writable; Writable.WritableState = WritableState; var util = require('util'); var Stream = require('stream'); util.inherits(Writable, Stream); function WriteReq(chunk, encoding, cb) { this.chunk = chunk; this.encoding = encoding; this.callback = cb; } function WritableState(options, stream) { options = options || {}; // the point at which write() starts returning false // Note: 0 is a valid value, means that we always return false if // the entire buffer is not flushed immediately on write() var hwm = options.highWaterMark; var defaultHwm = options.objectMode ? 16 : 16 * 1024; this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; // object stream flag to indicate whether or not this stream // contains buffers or objects. this.objectMode = !!options.objectMode; // cast to ints. this.highWaterMark = ~~this.highWaterMark; this.needDrain = false; // at the start of calling end() this.ending = false; // when end() has been called, and returned this.ended = false; // when 'finish' is emitted this.finished = false; // should we decode strings into buffers before passing to _write? // this is here so that some node-core streams can optimize string // handling at a lower level. var noDecode = options.decodeStrings === false; this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement // of how much we're waiting to get pushed to some underlying // socket or file. this.length = 0; // a flag to see when we're in the middle of a write. this.writing = false; // when true all writes will be buffered until .uncork() call this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, // or on a later tick. We set this to true at first, becuase any // actions that shouldn't happen until "later" should generally also // not happen before the first write call. this.sync = true; // a flag to know if we're processing previously buffered items, which // may call the _write() callback in the same tick, so that we don't // end up in an overlapped onwrite situation. this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) this.onwrite = function(er) {// pin("SW- onwrite"); onwrite(stream, er); }; // the callback that the user supplies to write(chunk,encoding,cb) this.writecb = null; // the amount that is being written when _write is called. this.writelen = 0; this.buffer = new Array(); // True if the error was already emitted and should not be thrown again this.errorEmitted = false; } function Writable(options) { // Writable ctor is applied to Duplexes, though they're not // instanceof Writable, they're instanceof Readable. if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) return new Writable(options); this._writableState = new WritableState(options, this); // legacy. this.writable = true; Stream.call(this); } // Otherwise people can pipe Writable streams, which is just wrong. Writable.prototype.pipe = function() { this.emit('error', new Error('Cannot pipe. Not readable.')); }; function writeAfterEnd(stream, state, cb) {// pin("SW- writeAfterEnd"); var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb stream.emit('error', er); process.nextTick(function() { cb(er); }); } // If we get something that is not a buffer, string, null, or undefined, // and we're not in objectMode, then that's an error. // Otherwise stream chunks are all considered to be of length=1, and the // watermarks determine how many objects to keep in the buffer, rather than // how many bytes or characters. function validChunk(stream, state, chunk, cb) { var valid = true; if (!Buffer.isBuffer(chunk) && 'string' !== typeof chunk && chunk !== null && chunk !== undefined && !state.objectMode) { var er = new TypeError('Invalid non-string/buffer chunk'); stream.emit('error', er); process.nextTick(function() { cb(er); }); valid = false; } return valid; } Writable.prototype.write = function(chunk, encoding, cb) { var state = this._writableState; var ret = false; if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (Buffer.isBuffer(chunk)) encoding = 'buffer'; else if (!encoding) encoding = state.defaultEncoding; if (typeof cb !== 'function') cb = function() { }; if (state.ended) writeAfterEnd(this, state, cb); else if (validChunk(this, state, chunk, cb)) { ret = writeOrBuffer(this, state, chunk, encoding, cb); } return ret; }; Writable.prototype.cork = function() { var state = this._writableState; state.corked++; }; Writable.prototype.uncork = function() { var state = this._writableState; if (state.corked) { state.corked--; if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.buffer.length) clearBuffer(this, state); } }; Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { // node::ParseEncoding() requires lower case. if (typeof encoding === 'string') encoding = encoding.toLowerCase(); if (!Buffer.isEncoding(encoding)) throw new TypeError('Unknown encoding: ' + encoding); this._writableState.defaultEncoding = encoding; }; function decodeChunk(state, chunk, encoding) { if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { chunk = new Buffer(chunk, encoding); } return chunk; } // if we're already writing something, then just put this // in the queue, and wait our turn. Otherwise, call _write // If we return false, then we need a drain event, so set that flag. function writeOrBuffer(stream, state, chunk, encoding, cb) { chunk = decodeChunk(state, chunk, encoding); if (Buffer.isBuffer(chunk)) encoding = 'buffer'; var len = state.objectMode ? 1 : chunk.length; state.length += len; var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. if (!ret) state.needDrain = true; if (state.writing || state.corked) state.buffer.push(new WriteReq(chunk, encoding, cb)); else doWrite(stream, state, false, len, chunk, encoding, cb); return ret; } function doWrite(stream, state, writev, len, chunk, encoding, cb) { state.writelen = len; state.writecb = cb; state.writing = true; state.sync = true; if (writev) stream._writev(chunk, state.onwrite); else stream._write(chunk, encoding, state.onwrite); state.sync = false; } function onwriteError(stream, state, sync, er, cb) { if (sync) process.nextTick(function() { cb(er); }); else { cb(er); } stream._writableState.errorEmitted = true; stream.emit('error', er); } function onwriteStateUpdate(state) { state.writing = false; state.writecb = null; state.length -= state.writelen; state.writelen = 0; } function onwrite(stream, er) { var state = stream._writableState; var sync = state.sync; var cb = state.writecb; onwriteStateUpdate(state); if (er) onwriteError(stream, state, sync, er, cb); else { // Check if we're actually ready to finish, but don't emit yet var finished = needFinish(stream, state); if (!finished && !state.corked && !state.bufferProcessing && state.buffer.length) { clearBuffer(stream, state); } if (sync) { process.nextTick(function() { afterWrite(stream, state, finished, cb); }); } else { afterWrite(stream, state, finished, cb); } } } function afterWrite(stream, state, finished, cb) { if (!finished) onwriteDrain(stream, state); cb(); finishMaybe(stream, state); } // Must force callback to be called on nextTick, so that we don't // emit 'drain' before the write() consumer gets the 'false' return // value, and has a chance to attach a 'drain' listener. function onwriteDrain(stream, state) { if (state.length === 0 && state.needDrain) { state.needDrain = false; stream.emit('drain'); } } // if there's something in the buffer waiting, then process it function clearBuffer(stream, state) { state.bufferProcessing = true; var sbl = state.buffer.length; var cbs = state.buffer.map(function(entry) { return entry.callback; }); if (sbl) { if (stream._writev) { var buf = state.buffer; // make jslint happy doWrite(stream, state, true, state.length, buf, '', function(err) { for (var c = 0; c < sbl; c++) { cbs[c](err); } }); state.buffer.length = 0; } else { for (var c = 0; c < sbl; c++) { var entry = state.buffer[c]; var chunk = entry.chunk; var encoding = entry.encoding; var cb = entry.callback; var len = state.objectMode ? 1 : chunk.length; doWrite(stream, state, false, len, chunk, encoding, cb); // if we didn't call the onwrite immediately, then // it means that we need to wait until it does. // also, that means that the chunk and cb are currently // being processed, so move the buffer counter past them. if (state.writing) { c++; break; } } if (c < state.buffer.length) { state.buffer = state.buffer.slice(c); } else { state.buffer.length = 0; } } } state.bufferProcessing = false; } Writable.prototype._write = function(chunk, encoding, cb) { cb(new Error('not implemented')); }; Writable.prototype.end = function(chunk, encoding, cb) { var state = this._writableState; if (typeof chunk === 'function') { cb = chunk; chunk = null; encoding = null; } else if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (typeof chunk !== 'undefined' && chunk !== null) this.write(chunk, encoding); // .end() fully uncorks if (state.corked) { state.corked = 1; this.uncork(); } // ignore unnecessary end() calls. if (!state.ending && !state.finished) endWritable(this, state, cb); }; function needFinish(stream, state) { return (state.ending && state.length === 0 && !state.finished && !state.writing); } function finishMaybe(stream, state) { var need = needFinish(stream, state); if (need) { state.finished = true; stream.emit('finish'); } return need; } function endWritable(stream, state, cb) { state.ending = true; finishMaybe(stream, state); if (cb) { if (state.finished) process.nextTick(cb); else stream.once('finish', cb); } state.ended = true; } // Copyright & License details are available under JXCORE_LICENSE file module.exports = Readable; Readable.ReadableState = ReadableState; var EE = require('events').EventEmitter; var Stream = require('stream'); var util = require('util'); var StringDecoder; util.inherits(Readable, Stream); function ReadableState(options, stream) { options = options || {}; // the point at which it stops calling _read() to fill the buffer // Note: 0 is a valid value, means "don't call _read preemptively ever" var hwm = options.highWaterMark; var defaultHwm = options.objectMode ? 16 : 16 * 1024; this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; // cast to ints. this.highWaterMark = ~~this.highWaterMark; this.buffer = []; this.length = 0; this.pipes = null; this.pipesCount = 0; this.flowing = false; this.ended = false; this.endEmitted = false; this.reading = false; // In streams that never have any data, and do push(null) right away, // the consumer can miss the 'end' event if they do some I/O before // consuming the stream. So, we don't emit('end') until some reading // happens. this.calledRead = false; // a flag to be able to tell if the onwrite cb is called immediately, // or on a later tick. We set this to true at first, becuase any // actions that shouldn't happen until "later" should generally also // not happen before the first write call. this.sync = true; // whenever we return null, then we set a flag to say // that we're awaiting a 'readable' event emission. this.needReadable = false; this.emittedReadable = false; this.readableListening = false; // object stream flag. Used to make read(n) ignore n and to // make all the buffer merging and length checks go away this.objectMode = !!options.objectMode; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // when piping, we only care about 'readable' events that happen // after read()ing all the bytes and not getting any pushback. this.ranOut = false; // the number of writers that are awaiting a drain event in .pipe()s this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled this.readingMore = false; this.decoder = null; this.encoding = null; if (options.encoding) { if (!StringDecoder) StringDecoder = require('string_decoder').StringDecoder; this.decoder = new StringDecoder(options.encoding); this.encoding = options.encoding; } } function Readable(options) { if (!(this instanceof Readable)) return new Readable(options); this._readableState = new ReadableState(options, this); // legacy this.readable = true; Stream.call(this); } // Manually shove something into the read() buffer. // This returns true if the highWaterMark has not been hit yet, // similar to how Writable.write() returns true if you should // write() some more. Readable.prototype.push = function(chunk, encoding) { var state = this._readableState; if (typeof chunk === 'string' && !state.objectMode) { encoding = encoding || state.defaultEncoding; if (encoding !== state.encoding) { chunk = new Buffer(chunk, encoding); encoding = ''; } } return readableAddChunk(this, state, chunk, encoding, false); }; // Unshift should *always* be something directly out of read() Readable.prototype.unshift = function(chunk) { var state = this._readableState; return readableAddChunk(this, state, chunk, '', true); }; function readableAddChunk(stream, state, chunk, encoding, addToFront) { var er = chunkInvalid(state, chunk); if (er) { stream.emit('error', er); } else if (chunk === null || chunk === undefined) { state.reading = false; if (!state.ended) onEofChunk(stream, state); } else if (state.objectMode || chunk && chunk.length > 0) { if (state.ended && !addToFront) { var e = new Error('stream.push() after EOF'); stream.emit('error', e); } else if (state.endEmitted && addToFront) { var e = new Error('stream.unshift() after end event'); stream.emit('error', e); } else { if (state.decoder && !addToFront && !encoding) chunk = state.decoder.write(chunk); // update the buffer info. state.length += state.objectMode ? 1 : chunk.length; if (addToFront) { state.buffer.unshift(chunk); } else { state.reading = false; state.buffer.push(chunk); } if (state.needReadable) emitReadable(stream); maybeReadMore(stream, state); } } else if (!addToFront) { state.reading = false; } return needMoreData(state); } // if it's past the high water mark, we can push in some more. // Also, if we have no data yet, we can stand some // more bytes. This is to work around cases where hwm=0, // such as the repl. Also, if the push() triggered a // readable event, and the user called read(largeNumber) such that // needReadable was set, then we ought to push more, so that another // 'readable' event will be triggered. function needMoreData(state) { return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); } // backwards compatibility. Readable.prototype.setEncoding = function(enc) { if (!StringDecoder) StringDecoder = require('string_decoder').StringDecoder; this._readableState.decoder = new StringDecoder(enc); this._readableState.encoding = enc; }; // Don't raise the hwm > 128MB var MAX_HWM = 0x800000; function roundUpToNextPowerOf2(n) { if (n >= MAX_HWM) { n = MAX_HWM; } else { // Get the next highest power of 2 n--; for (var p = 1; p < 32; p <<= 1) n |= n >> p; n++; } return n; } function howMuchToRead(n, state) { if (state.length === 0 && state.ended) return 0; if (state.objectMode) return n === 0 ? 0 : 1; if (n === null || global.isNaN(n)) { // only flow one buffer at a time if (state.flowing && state.buffer.length) return state.buffer[0].length; else return state.length; } if (n <= 0) return 0; // If we're asking for more than the target buffer level, // then raise the water mark. Bump up to the next highest // power of 2, to prevent increasing it excessively in tiny // amounts. if (n > state.highWaterMark) state.highWaterMark = roundUpToNextPowerOf2(n); // don't have that much. return null, unless we've ended. if (n > state.length) { if (!state.ended) { state.needReadable = true; return 0; } else return state.length; } return n; } // you can override either this method, or the async _read(n) below. Readable.prototype.read = function(n) { var state = this._readableState; state.calledRead = true; var nOrig = n; var ret; if (typeof n !== 'number' || n > 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we // already have a bunch of data in the buffer, then just trigger // the 'readable' event and move on. if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { emitReadable(this); return null; } n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. if (n === 0 && state.ended) { ret = null; // In cases where the decoder did not receive enough data // to produce a full chunk, then immediately received an // EOF, state.buffer will contain [, ]. // howMuchToRead will see this and coerce the amount to // read to zero (because it's looking at the length of the // first in state.buffer), and we'll end up here. // // This can only happen via state.decoder -- no other venue // exists for pushing a zero-length chunk into state.buffer // and triggering this behavior. In this case, we return our // remaining data and end the stream, if appropriate. if (state.length > 0 && state.decoder) { ret = fromList(n, state); state.length -= ret.length; } if (state.length === 0) endReadable(this); return ret; } // All the actual chunk generation logic needs to be // *below* the call to _read. The reason is that in certain // synthetic stream cases, such as passthrough streams, _read // may be a completely synchronous operation which may change // the state of the read buffer, providing enough data when // before there was *not* enough. // // So, the steps are: // 1. Figure out what the state of things will be after we do // a read from the buffer. // // 2. If that resulting state will trigger a _read, then call _read. // Note that this may be asynchronous, or synchronous. Yes, it is // deeply ugly to write APIs this way, but that still doesn't mean // that the Readable class should behave improperly, as streams are // designed to be sync/async agnostic. // Take note if the _read call is sync or async (ie, if the read call // has returned yet), so that we know whether or not it's safe to emit // 'readable' etc. // // 3. Actually pull the requested chunks out of the buffer and return. // if we need a readable event, then we need to do some reading. var doRead = state.needReadable; // if we currently have less than the highWaterMark, then also read some if (state.length - n <= state.highWaterMark) doRead = true; // however, if we've ended, then there's no point, and if we're already // reading, then it's unnecessary. if (state.ended || state.reading) doRead = false; if (doRead) { state.reading = true; state.sync = true; // if the length is currently zero, then we *need* a readable event. if (state.length === 0) state.needReadable = true; // call internal read method this._read(state.highWaterMark); state.sync = false; } // If _read called its callback synchronously, then `reading` // will be false, and we need to re-evaluate how much data we // can return to the user. if (doRead && !state.reading) n = howMuchToRead(nOrig, state); if (n > 0) ret = fromList(n, state); else ret = null; if (ret === null) { state.needReadable = true; n = 0; } state.length -= n; // If we have nothing in the buffer, then we want to know // as soon as we *do* get something into the buffer. if (state.length === 0 && !state.ended) state.needReadable = true; // If we happened to read() exactly the remaining amount in the // buffer, and the EOF has been seen at this point, then make sure // that we emit 'end' on the very next tick. if (state.ended && !state.endEmitted && state.length === 0) endReadable(this); return ret; }; function chunkInvalid(state, chunk) { var er = null; if (!Buffer.isBuffer(chunk) && 'string' !== typeof chunk && chunk !== null && chunk !== undefined && !state.objectMode) { er = new TypeError('Invalid non-string/buffer chunk'); } return er; } function onEofChunk(stream, state) { if (state.decoder && !state.ended) { var chunk = state.decoder.end(); if (chunk && chunk.length) { state.buffer.push(chunk); state.length += state.objectMode ? 1 : chunk.length; } } state.ended = true; // if we've ended and we have some data left, then emit // 'readable' now to make sure it gets picked up. if (state.length > 0) emitReadable(stream); else endReadable(stream); } // Don't emit readable right away in sync mode, because this can trigger // another read() call => stack overflow. This way, it might trigger // a nextTick recursion warning, but that's not so bad. function emitReadable(stream) { var state = stream._readableState; state.needReadable = false; if (state.emittedReadable) return; state.emittedReadable = true; if (state.sync) process.nextTick(function() { emitReadable_(stream); }); else emitReadable_(stream); } function emitReadable_(stream) { stream.emit('readable'); } // at this point, the user has presumably seen the 'readable' event, // and called read() to consume some data. that may have triggered // in turn another _read(n) call, in which case reading = true if // it's in progress. // However, if we're not ended, or reading, and the length < hwm, // then go ahead and try to read some more preemptively. function maybeReadMore(stream, state) { if (!state.readingMore) { state.readingMore = true; process.nextTick(function() { maybeReadMore_(stream, state); }); } } function maybeReadMore_(stream, state) { var len = state.length; while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { stream.read(0); if (len === state.length) // didn't get any data, stop spinning. break; else len = state.length; } state.readingMore = false; } // abstract method. to be overridden in specific implementation classes. // call cb(er, data) where data is <= n in length. // for virtual (non-string, non-buffer) streams, "length" is somewhat // arbitrary, and perhaps not very meaningful. Readable.prototype._read = function(n) { this.emit('error', new Error('not implemented')); }; Readable.prototype.pipe = function(dest, pipeOpts) { var src = this; var state = this._readableState; switch (state.pipesCount) { case 0: state.pipes = dest; break; case 1: state.pipes = [state.pipes, dest]; break; default: state.pipes.push(dest); break; } state.pipesCount += 1; var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; var endFn = doEnd ? onend : cleanup; if (state.endEmitted) process.nextTick(endFn); else src.once('end', endFn); dest.on('unpipe', onunpipe); function onunpipe(readable) { if (readable !== src) return; cleanup(); } function onend() { dest.end(); } // when the dest drains, it reduces the awaitDrain counter // on the source. This would be more elegant with a .once() // handler in flow(), but adding and removing repeatedly is // too slow. var ondrain = pipeOnDrain(src); dest.on('drain', ondrain); function cleanup() { // cleanup event handlers once the pipe is broken dest.removeListener('close', onclose); dest.removeListener('finish', onfinish); dest.removeListener('drain', ondrain); dest.removeListener('error', onerror); dest.removeListener('unpipe', onunpipe); src.removeListener('end', onend); src.removeListener('end', cleanup); // if the reader is waiting for a drain event from this // specific writer, then it would cause it to never start // flowing again. // So, if this is awaiting a drain, then we just call it now. // If we don't know, then assume that we are waiting for one. if (!dest._writableState || dest._writableState.needDrain) ondrain(); } // if the dest has an error, then stop piping into it. // however, don't suppress the throwing behavior for this. function onerror(er) { unpipe(); dest.removeListener('error', onerror); if (EE.listenerCount(dest, 'error') === 0) dest.emit('error', er); } // This is a brutally ugly hack to make sure that our error handler // is attached before any userland ones. NEVER DO THIS. if (!dest._events || !dest._events.error) dest.on('error', onerror); else if (Array.isArray(dest._events.error)) dest._events.error.unshift(onerror); else dest._events.error = [onerror, dest._events.error]; // Both close and finish should trigger unpipe, but only once. function onclose() { dest.removeListener('finish', onfinish); unpipe(); } dest.once('close', onclose); function onfinish() { dest.removeListener('close', onclose); unpipe(); } dest.once('finish', onfinish); function unpipe() { src.unpipe(dest); } // tell the dest that it's being piped to dest.emit('pipe', src); // start the flow if it hasn't been started already. if (!state.flowing) { // the handler that waits for readable events after all // the data gets sucked out in flow. // This would be easier to follow with a .once() handler // in flow(), but that is too slow. this.on('readable', pipeOnReadable); state.flowing = true; process.nextTick(function() { flow(src); }); } return dest; }; function pipeOnDrain(src) { return function() { var dest = this; var state = src._readableState; state.awaitDrain--; if (state.awaitDrain === 0) flow(src); }; } function flow(src) { var state = src._readableState; var chunk; state.awaitDrain = 0; function write(dest, i, list) { var written = dest.write(chunk); if (false === written) { state.awaitDrain++; } } while (state.pipesCount && null !== (chunk = src.read())) { if (state.pipesCount === 1) write(state.pipes, 0, null); else state.pipes.forEach(write); src.emit('data', chunk); // if anyone needs a drain, then we have to wait for that. if (state.awaitDrain > 0) return; } // if every destination was unpiped, either before entering this // function, or in the while loop, then stop flowing. // // NB: This is a pretty rare edge case. if (state.pipesCount === 0) { state.flowing = false; // if there were data event listeners added, then switch to old mode. if (EE.listenerCount(src, 'data') > 0) emitDataEvents(src); return; } // at this point, no one needed a drain, so we just ran out of data // on the next readable event, start it over again. state.ranOut = true; } function pipeOnReadable() { if (this._readableState.ranOut) { this._readableState.ranOut = false; flow(this); } } Readable.prototype.unpipe = function(dest) { var state = this._readableState; // if we're not piping anywhere, then do nothing. if (state.pipesCount === 0) return this; // just one destination. most common case. if (state.pipesCount === 1) { // passed in one, but it's not the right one. if (dest && dest !== state.pipes) return this; if (!dest) dest = state.pipes; // got a match. state.pipes = null; state.pipesCount = 0; this.removeListener('readable', pipeOnReadable); state.flowing = false; if (dest) dest.emit('unpipe', this); return this; } // slow case. multiple pipe destinations. if (!dest) { // remove all. var dests = state.pipes; var len = state.pipesCount; state.pipes = null; state.pipesCount = 0; this.removeListener('readable', pipeOnReadable); state.flowing = false; for (var i = 0; i < len; i++) dests[i].emit('unpipe', this); return this; } // try to find the right one. var i = state.pipes.indexOf(dest); if (i === -1) return this; state.pipes.splice(i, 1); state.pipesCount -= 1; if (state.pipesCount === 1) state.pipes = state.pipes[0]; dest.emit('unpipe', this); return this; }; // set up data events if they are asked for // Ensure readable listeners eventually get something Readable.prototype.on = function(ev, fn) { var res = Stream.prototype.on.call(this, ev, fn); if (ev === 'data' && !this._readableState.flowing) emitDataEvents(this); if (ev === 'readable' && this.readable) { var state = this._readableState; if (!state.readableListening) { state.readableListening = true; state.emittedReadable = false; state.needReadable = true; if (!state.reading) { this.read(0); } else if (state.length) { emitReadable(this, state); } } } return res; }; Readable.prototype.addListener = Readable.prototype.on; // pause() and resume() are remnants of the legacy readable stream API // If the user uses them, then switch into old mode. Readable.prototype.resume = function() { emitDataEvents(this); this.read(0); this.emit('resume'); }; Readable.prototype.pause = function() { emitDataEvents(this, true); this.emit('pause'); }; function emitDataEvents(stream, startPaused) { var state = stream._readableState; if (state.flowing) { // https://github.com/isaacs/readable-stream/issues/16 throw new Error('Cannot switch to old mode now.'); } var paused = startPaused || false; var readable = false; // convert to an old-style stream. stream.readable = true; stream.pipe = Stream.prototype.pipe; stream.on = stream.addListener = Stream.prototype.on; stream.on('readable', function() { readable = true; var c; while (!paused && (null !== (c = stream.read()))) stream.emit('data', c); if (c === null) { readable = false; stream._readableState.needReadable = true; } }); stream.pause = function() { paused = true; this.emit('pause'); }; stream.resume = function() { paused = false; if (readable) process.nextTick(function() { stream.emit('readable'); }); else this.read(0); this.emit('resume'); }; // now make it start, just in case it hadn't already. stream.emit('readable'); } // wrap an old-style stream as the async data source. // This is *not* part of the readable stream interface. // It is an ugly unfortunate mess of history. Readable.prototype.wrap = function(stream) { var state = this._readableState; var paused = false; var self = this; stream.on('end', function() { if (state.decoder && !state.ended) { var chunk = state.decoder.end(); if (chunk && chunk.length) self.push(chunk); } self.push(null); }); stream.on('data', function(chunk) { if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode // if (state.objectMode && util.isNullOrUndefined(chunk)) if (state.objectMode && (chunk === null || chunk === undefined)) return; else if (!state.objectMode && (!chunk || !chunk.length)) return; var ret = self.push(chunk); if (!ret) { paused = true; stream.pause(); } }); // proxy all the other methods. // important when wrapping filters and duplexes. for (var i in stream) { if (!stream.hasOwnProperty(i)) continue; if (typeof stream[i] === 'function' && typeof this[i] === 'undefined') { this[i] = function(method) { return function() { return stream[method].apply(stream, arguments); } }(i); } } // proxy certain important events. var events = ['error', 'close', 'destroy', 'pause', 'resume']; events.forEach(function(ev) { stream.on(ev, self.emit.bind(self, ev)); }); // when we try to consume some more bytes, simply unpause the // underlying stream. self._read = function(n) { if (paused) { paused = false; stream.resume(); } }; return self; }; // exposed for testing purposes only. Readable._fromList = fromList; // Pluck off n bytes from an array of buffers. // Length is the combined lengths of all the buffers in the list. function fromList(n, state) { var list = state.buffer; var length = state.length; var stringMode = !!state.decoder; var objectMode = !!state.objectMode; var ret; // nothing in the list, definitely empty. if (list.length === 0) return null; if (length === 0) ret = null; else if (objectMode) ret = list.shift(); else if (!n || n >= length) { // read it all, truncate the array. if (stringMode) ret = list.join(''); else ret = Buffer.concat(list, length); list.length = 0; } else { // read just some of it. if (n < list[0].length) { // just take a part of the first list item. // slice is the same for buffers and strings. var buf = list[0]; ret = buf.slice(0, n); list[0] = buf.slice(n); } else if (n === list[0].length) { // first list is a perfect match ret = list.shift(); } else { // complex case. // we have enough to cover it, but it spans past the first buffer. if (stringMode) ret = ''; else ret = new Buffer(n); var c = 0; for (var i = 0, l = list.length; i < l && c < n; i++) { var buf = list[0]; var cpy = Math.min(n - c, buf.length); if (stringMode) ret += buf.slice(0, cpy); else buf.copy(ret, c, 0, cpy); if (cpy < buf.length) list[0] = buf.slice(cpy); else list.shift(); c += cpy; } } } return ret; } function endReadable(stream) { var state = stream._readableState; // If we get here before consuming all the bytes, then that is a // bug in node. Should never happen. if (state.length > 0) throw new Error('endReadable called on non-empty stream'); if (!state.endEmitted && state.calledRead) { state.ended = true; process.nextTick(function() { // Check that we didn't get one last unshift. if (!state.endEmitted && state.length === 0) { state.endEmitted = true; stream.readable = false; stream.emit('end'); } }); } } // Copyright & License details are available under JXCORE_LICENSE file module.exports = Stream; var EE = require('events').EventEmitter; var util = require('util'); util.inherits(Stream, EE); Stream.Readable = require('_stream_readable'); Stream.Writable = require('_stream_writable'); Stream.Duplex = require('_stream_duplex'); Stream.Transform = require('_stream_transform'); Stream.PassThrough = require('_stream_passthrough'); // Backwards-compat with node 0.4.x Stream.Stream = Stream; // old-style streams. Note that the pipe method (the only relevant // part of this class) is overridden in the Readable class. function Stream() { EE.call(this); } Stream.prototype.pipe = function(dest, options) { var source = this; function ondata(chunk) { if (dest.writable) { if (false === dest.write(chunk) && source.pause) { source.pause(); } } } source.on('data', ondata); function ondrain() { if (source.readable && source.resume) { source.resume(); } } dest.on('drain', ondrain); // If the 'end' option is not supplied, dest.end() will be called when // source gets the 'end' or 'close' events. Only dest.end() once. if (!dest._isStdio && (!options || options.end !== false)) { source.on('end', onend); source.on('close', onclose); } var didOnEnd = false; function onend() { if (didOnEnd) return; didOnEnd = true; dest.end(); } function onclose() { if (didOnEnd) return; didOnEnd = true; if (typeof dest.destroy === 'function') dest.destroy(); } // don't leave dangling pipes when there are errors. function onerror(er) { cleanup(); if (EE.listenerCount(this, 'error') === 0) { throw er; // Unhandled stream error in pipe. } } source.on('error', onerror); dest.on('error', onerror); // remove all the event listeners that were added. function cleanup() { source.removeListener('data', ondata); dest.removeListener('drain', ondrain); source.removeListener('end', onend); source.removeListener('close', onclose); source.removeListener('error', onerror); dest.removeListener('error', onerror); source.removeListener('end', cleanup); source.removeListener('close', cleanup); dest.removeListener('close', cleanup); } source.on('end', cleanup); source.on('close', cleanup); dest.on('close', cleanup); dest.emit('pipe', source); // Allow for unix-like usage: A.pipe(B).pipe(C) return dest; }; // Copyright & License details are available under JXCORE_LICENSE file /* * A repl library that you can include in your own code to get a runtime * interface to your program. * * var repl = require("repl"); // start repl on stdin repl.start("prompt> "); * // listen for unix socket connections and start repl on them * net.createServer(function(socket) { repl.start("node via Unix socket> ", * socket); }).listen("/tmp/node-repl-sock"); * // listen for TCP socket connections and start repl on them * net.createServer(function(socket) { repl.start("node via TCP socket> ", * socket); }).listen(5001); * // expose foo to repl context repl.start("node > ").context.foo = "stdin is * fun"; */ var util = require('util'); var inherits = require('util').inherits; var Stream = require('stream'); var vm = require('vm'); var path = require('path'); var fs = require('fs'); var rl = require('readline'); var Console = require('console').Console; var EventEmitter = require('events').EventEmitter; // If obj.hasOwnProperty has been overridden, then calling // obj.hasOwnProperty(prop) will break. // See: https://github.com/joyent/node/issues/1707 function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } // hack for require.resolve("./relative") to work properly. module.filename = path.resolve('repl'); // hack for repl require to work properly with node_modules folders module.paths = require('module')._nodeModulePaths(module.filename); // Can overridden with custom print functions, such as `probe` or `eyes.js`. // This is the default "writer" value if none is passed in the REPL options. exports.writer = util.inspect; exports._builtinLibs = ['assert', 'buffer', 'child_process', 'cluster', 'crypto', 'dgram', 'dns', 'domain', 'events', 'fs', 'http', 'https', 'net', 'os', 'path', 'punycode', 'querystring', 'readline', 'stream', 'string_decoder', 'tls', 'tty', 'url', 'util', 'vm', 'zlib']; function REPLServer(prompt, stream, eval_, useGlobal, ignoreUndefined) { if (!(this instanceof REPLServer)) { return new REPLServer(prompt, stream, eval_, useGlobal, ignoreUndefined); } EventEmitter.call(this); var options, input, output; if (typeof prompt == 'object') { // an options object was given options = prompt; stream = options.stream || options.socket; input = options.input; output = options.output; eval_ = options.eval; useGlobal = options.useGlobal; ignoreUndefined = options.ignoreUndefined; prompt = options.prompt; } else if (typeof prompt != 'string') { throw new Error('An options Object, or a prompt String are required'); } else { options = {}; } var self = this; self.useGlobal = !!useGlobal; self.ignoreUndefined = !!ignoreUndefined; self.eval = eval_ || function(code, context, file, cb) { var err, result; try { if (self.useGlobal) { result = vm.runInThisContext(code, file); } else { result = vm.runInContext(code, context, file); } } catch (e) { err = e; } if (err && process.domain) { process.domain.emit('error', err); process.domain.exit(); } else { cb(err, result); } }; if (!input && !output) { // legacy API, passing a 'stream'/'socket' option if (!stream) { // use stdin and stdout as the default streams if none were given stream = process; } if (stream.stdin && stream.stdout) { // We're given custom object with 2 streams, or the `process` object input = stream.stdin; output = stream.stdout; } else { // We're given a duplex readable/writable Stream, like a `net.Socket` input = stream; output = stream; } } self.inputStream = input; self.outputStream = output; self.resetContext(); self.bufferedCommand = ''; self.prompt = (prompt != undefined ? prompt : '> '); function complete(text, callback) { self.complete(text, callback); } var rli = rl.createInterface({ input: self.inputStream, output: self.outputStream, completer: complete, terminal: options.terminal }); self.rli = rli; this.commands = {}; defineDefaultCommands(this); // figure out which "writer" function to use self.writer = options.writer || exports.writer; if (typeof options.useColors === 'undefined') { options.useColors = rli.terminal; } self.useColors = !!options.useColors; if (self.useColors && self.writer === util.inspect) { // Turn on ANSI coloring. self.writer = function(obj, showHidden, depth) { return util.inspect(obj, showHidden, depth, true); }; } rli.setPrompt(self.prompt); rli.on('close', function() { self.emit('exit'); }); var sawSIGINT = false; rli.on('SIGINT', function() { var empty = rli.line.length === 0; rli.clearLine(); if (!(self.bufferedCommand && self.bufferedCommand.length > 0) && empty) { if (sawSIGINT) { rli.close(); sawSIGINT = false; return; } rli.output.write('(^C again to quit)\n'); sawSIGINT = true; } else { sawSIGINT = false; } self.bufferedCommand = ''; self.displayPrompt(); }); rli.on('line', function(cmd) { sawSIGINT = false; var skipCatchall = false; cmd = trimWhitespace(cmd); // Check to see if a REPL keyword was used. If it returns true, // display next prompt and return. if (cmd && cmd.charAt(0) === '.' && isNaN(parseFloat(cmd))) { var matches = cmd.match(/^(\.[^\s]+)\s*(.*)$/); var keyword = matches && matches[1]; var rest = matches && matches[2]; if (self.parseREPLKeyword(keyword, rest) === true) { return; } else { self.outputStream.write('Invalid REPL keyword\n'); skipCatchall = true; } } if (!skipCatchall) { var evalCmd = self.bufferedCommand + cmd + '\n'; // This try is for determining if the command is complete, or should // continue onto the next line. // We try to evaluate both expressions e.g. // '{ a : 1 }' // and statements e.g. // 'for (var i = 0; i < 10; i++) console.log(i);' // First we attempt to eval as expression with parens. // This catches '{a : 1}' properly. self.eval('(' + evalCmd + ')', self.context, 'repl', function(e, ret) { if (e && !isSyntaxError(e)) return finish(e); if (typeof ret === 'function' && /^[\r\n\s]*function/.test(evalCmd) || e) { // Now as statement without parens. self.eval(evalCmd, self.context, 'repl', finish); } else { finish(null, ret); } }); } else { finish(null); } function finish(e, ret) { self.memory(cmd); // If error was SyntaxError and not JSON.parse error if (isSyntaxError(e)) { if (!self.bufferedCommand && cmd.trim().match(/^npm /)) { self.outputStream.write('npm should be run outside of the ' + 'node repl, in your normal shell.\n' + '(Press Control-D to exit.)\n'); self.bufferedCommand = ''; self.displayPrompt(); return; } // Start buffering data like that: // { // ... x: 1 // ... } self.bufferedCommand += cmd + '\n'; self.displayPrompt(); return; } else if (e) { if (process.versions.sm) { Error.captureStackTrace(e); } self.outputStream.write((e.stack || e) + '\n'); } // Clear buffer if no SyntaxErrors self.bufferedCommand = ''; // If we got any output - print it (if no error) if (!e && (!self.ignoreUndefined || ret !== undefined)) { self.context._ = ret; self.outputStream.write(self.writer(ret) + '\n'); } // Display prompt again self.displayPrompt(); }; }); rli.on('SIGCONT', function() { self.displayPrompt(true); }); self.displayPrompt(); } inherits(REPLServer, EventEmitter); exports.REPLServer = REPLServer; // prompt is a string to print on each line for the prompt, // source is a stream to use for I/O, defaulting to stdin/stdout. exports.start = function(prompt, source, eval_, useGlobal, ignoreUndefined) { var repl = new REPLServer(prompt, source, eval_, useGlobal, ignoreUndefined); if (!exports.repl) exports.repl = repl; return repl; }; REPLServer.prototype.createContext = function() { var context; if (this.useGlobal) { context = global; } else { context = vm.createContext(); for (var i in global) if (global.hasOwnProperty(i)) context[i] = global[i]; context.console = new Console(this.outputStream); context.global = context; context.global.global = context; } context.module = module; context.require = require; this.lines = []; this.lines.level = []; // make built-in modules available directly // (loaded lazily) exports._builtinLibs.forEach(function(name) { Object.defineProperty(context, name, { get: function() { var lib = require(name); context._ = context[name] = lib; return lib; }, // allow the creation of other globals with this name set: function(val) { delete context[name]; context[name] = val; }, configurable: true }); }); return context; }; REPLServer.prototype.resetContext = function() { this.context = this.createContext(); // Allow REPL extensions to extend the new context this.emit('reset', this.context); }; REPLServer.prototype.displayPrompt = function(preserveCursor) { var prompt = this.prompt; if (this.bufferedCommand.length) { prompt = '...'; var levelInd = new Array(this.lines.level.length).join('..'); prompt += levelInd + ' '; } this.rli.setPrompt(prompt); this.rli.prompt(preserveCursor); }; // A stream to push an array into a REPL // used in REPLServer.complete function ArrayStream() { Stream.call(this); this.run = function(data) { var self = this; data.forEach(function(line) { self.emit('data', line + '\n'); }); } } util.inherits(ArrayStream, Stream); ArrayStream.prototype.readable = true; ArrayStream.prototype.writable = true; ArrayStream.prototype.resume = function() { }; ArrayStream.prototype.write = function() { }; var requireRE = /\brequire\s*\(['"](([\w\.\/-]+\/)?([\w\.\/-]*))/; var simpleExpressionRE = /(([a-zA-Z_$](?:\w|\$)*)\.)*([a-zA-Z_$](?:\w|\$)*)\.?$/; // Provide a list of completions for the given leading text. This is // given to the readline interface for handling tab completion. // // Example: // complete('var foo = util.') // -> [['util.print', 'util.debug', 'util.log', 'util.inspect', 'util.pump'], // 'util.' ] // // Warning: This eval's code like "foo.bar.baz", so it will run property // getter code. REPLServer.prototype.complete = function(line, callback) { // There may be local variables to evaluate, try a nested REPL if (this.bufferedCommand != undefined && this.bufferedCommand.length) { // Get a new array of inputed lines var tmp = this.lines.slice(); // Kill off all function declarations to push all local variables into // global scope this.lines.level.forEach(function(kill) { if (kill.isFunction) { tmp[kill.line] = ''; } }); var flat = new ArrayStream(); // make a new "input" stream var magic = new REPLServer('', flat); // make a nested REPL magic.context = magic.createContext(); flat.run(tmp); // eval the flattened code // all this is only profitable if the nested REPL // does not have a bufferedCommand if (!magic.bufferedCommand) { return magic.complete(line, callback); } } var completions; // list of completion lists, one for each inheritance "level" var completionGroups = []; var completeOn, match, filter, i, j, group, c; // REPL commands (e.g. ".break"). var match = null; match = line.match(/^\s*(\.\w*)$/); if (match) { completionGroups.push(Object.keys(this.commands)); completeOn = match[1]; if (match[1].length > 1) { filter = match[1]; } completionGroupsLoaded(); } else if (match = line.match(requireRE)) { // require('...') var exts = Object.keys(require.extensions); var indexRe = new RegExp('^index(' + exts.map(regexpEscape).join('|') + ')$'); completeOn = match[1]; var subdir = match[2] || ''; var filter = match[1]; var dir, files, f, name, base, ext, abs, subfiles, s; group = []; var paths = module.paths.concat(require('module').globalPaths); for (i = 0; i < paths.length; i++) { dir = path.resolve(paths[i], subdir); try { files = fs.readdirSync(dir); } catch (e) { continue; } for (f = 0; f < files.length; f++) { name = files[f]; ext = path.extname(name); base = name.slice(0, -ext.length); if (base.match(/-\d+\.\d+(\.\d+)?/) || name === '.npm') { // Exclude versioned names that 'npm' installs. continue; } if (exts.indexOf(ext) !== -1) { if (!subdir || base !== 'index') { group.push(subdir + base); } } else { abs = path.resolve(dir, name); try { if (fs.statSync(abs).isDirectory()) { group.push(subdir + name + '/'); subfiles = fs.readdirSync(abs); for (s = 0; s < subfiles.length; s++) { if (indexRe.test(subfiles[s])) { group.push(subdir + name); } } } } catch (e) { } } } } if (group.length) { completionGroups.push(group); } if (!subdir) { completionGroups.push(exports._builtinLibs); } completionGroupsLoaded(); // Handle variable member lookup. // We support simple chained expressions like the following (no function // calls, etc.). That is for simplicity and also because we *eval* that // leading expression so for safety (see WARNING above) don't want to // eval function calls. // // foo.bar<|> # completions for 'foo' with filter 'bar' // spam.eggs.<|> # completions for 'spam.eggs' with filter '' // foo<|> # all scope vars with filter 'foo' // foo.<|> # completions for 'foo' with filter '' } else if (line.length === 0 || line[line.length - 1].match(/\w|\.|\$/)) { match = simpleExpressionRE.exec(line); if (line.length === 0 || match) { var expr; completeOn = (match ? match[0] : ''); if (line.length === 0) { filter = ''; expr = ''; } else if (line[line.length - 1] === '.') { filter = ''; expr = match[0].slice(0, match[0].length - 1); } else { var bits = match[0].split('.'); filter = bits.pop(); expr = bits.join('.'); } // Resolve expr and get its completions. var obj, memberGroups = []; if (!expr) { // If context is instance of vm.ScriptContext // Get global vars synchronously if (this.useGlobal || this.context.constructor && this.context.constructor.name === 'Context') { var contextProto = this.context; while (contextProto = Object.getPrototypeOf(contextProto)) { completionGroups.push(Object.getOwnPropertyNames(contextProto)); } completionGroups.push(Object.getOwnPropertyNames(this.context)); addStandardGlobals(completionGroups, filter); completionGroupsLoaded(); } else { this.eval('.scope', this.context, 'repl', function(err, globals) { if (err || !globals) { addStandardGlobals(completionGroups, filter); } else if (Array.isArray(globals[0])) { // Add grouped globals globals.forEach(function(group) { completionGroups.push(group); }); } else { completionGroups.push(globals); addStandardGlobals(completionGroups, filter); } completionGroupsLoaded(); }); } } else { this.eval(expr, this.context, 'repl', function(e, obj) { // if (e) console.log(e); if (obj != null) { if (typeof obj === 'object' || typeof obj === 'function') { memberGroups.push(Object.getOwnPropertyNames(obj)); } // works for non-objects try { var sentinel = 5; var p; if (typeof obj === 'object' || typeof obj === 'function') { p = Object.getPrototypeOf(obj); } else { p = obj.constructor ? obj.constructor.prototype : null; } while (p !== null) { memberGroups.push(Object.getOwnPropertyNames(p)); p = Object.getPrototypeOf(p); // Circular refs possible? Let's guard against that. sentinel--; if (sentinel <= 0) { break; } } } catch (e) { // console.log("completion error walking prototype chain:" + e); } } if (memberGroups.length) { for (i = 0; i < memberGroups.length; i++) { completionGroups.push(memberGroups[i].map(function(member) { return expr + '.' + member; })); } if (filter) { filter = expr + '.' + filter; } } completionGroupsLoaded(); }); } } else { completionGroupsLoaded(); } } else { completionGroupsLoaded(); } // Will be called when all completionGroups are in place // Useful for async autocompletion function completionGroupsLoaded(err) { if (err) throw err; // Filter, sort (within each group), uniq and merge the completion groups. if (completionGroups.length && filter) { var newCompletionGroups = []; for (i = 0; i < completionGroups.length; i++) { group = completionGroups[i].filter(function(elem) { return elem.indexOf(filter) == 0; }); if (group.length) { newCompletionGroups.push(group); } } completionGroups = newCompletionGroups; } if (completionGroups.length) { var uniq = {}; // unique completions across all groups completions = []; // Completion group 0 is the "closest" // (least far up the inheritance chain) // so we put its completions last: to be closest in the REPL. for (i = completionGroups.length - 1; i >= 0; i--) { group = completionGroups[i]; group.sort(); for (var j = 0; j < group.length; j++) { c = group[j]; if (!hasOwnProperty(uniq, c)) { completions.push(c); uniq[c] = true; } } completions.push(''); // separator btwn groups } while (completions.length && completions[completions.length - 1] === '') { completions.pop(); } } callback(null, [completions || [], completeOn]); } }; /** * Used to parse and execute the Node REPL commands. * * @param {keyword} * keyword The command entered to check. * @return {Boolean} If true it means don't continue parsing the command. */ REPLServer.prototype.parseREPLKeyword = function(keyword, rest) { var cmd = this.commands[keyword]; if (cmd) { cmd.action.call(this, rest); return true; } return false; }; REPLServer.prototype.defineCommand = function(keyword, cmd) { if (typeof cmd === 'function') { cmd = { action: cmd }; } else if (typeof cmd.action !== 'function') { throw new Error('bad argument, action must be a function'); } this.commands['.' + keyword] = cmd; }; REPLServer.prototype.memory = function memory(cmd) { var self = this; self.lines = self.lines || []; self.lines.level = self.lines.level || []; // save the line so I can do magic later if (cmd) { // TODO should I tab the level? self.lines.push(new Array(self.lines.level.length).join(' ') + cmd); } else { // I don't want to not change the format too much... self.lines.push(''); } // I need to know "depth." // Because I can not tell the difference between a } that // closes an object literal and a } that closes a function if (cmd) { // going down is { and ( e.g. function() { // going up is } and ) var dw = cmd.match(/{|\(/g); var up = cmd.match(/}|\)/g); up = up ? up.length : 0; dw = dw ? dw.length : 0; var depth = dw - up; if (depth) { (function workIt() { if (depth > 0) { // going... down. // push the line#, depth count, and if the line is a function. // Since JS only has functional scope I only need to remove // "function() {" lines, clearly this will not work for // "function() // {" but nothing should break, only tab completion for local // scope will not work for this function. self.lines.level.push({ line: self.lines.length - 1, depth: depth, isFunction: /\s*function\s*/.test(cmd) }); } else if (depth < 0) { // going... up. var curr = self.lines.level.pop(); if (curr) { var tmp = curr.depth + depth; if (tmp < 0) { // more to go, recurse depth += curr.depth; workIt(); } else if (tmp > 0) { // remove and push back curr.depth += depth; self.lines.level.push(curr); } } } }()); } // it is possible to determine a syntax error at this point. // if the REPL still has a bufferedCommand and // self.lines.level.length === 0 // TODO? keep a log of level so that any syntax breaking lines can // be cleared on .break and in the case of a syntax error? // TODO? if a log was kept, then I could clear the bufferedComand and // eval these lines and throw the syntax error } else { self.lines.level = []; } }; function addStandardGlobals(completionGroups, filter) { // Global object properties // (http://www.ecma-international.org/publications/standards/Ecma-262.htm) completionGroups.push(['NaN', 'Infinity', 'undefined', 'eval', 'parseInt', 'parseFloat', 'isNaN', 'isFinite', 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'Object', 'Function', 'Array', 'String', 'Boolean', 'Number', 'Date', 'RegExp', 'Error', 'EvalError', 'RangeError', 'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Math', 'JSON']); // Common keywords. Exclude for completion on the empty string, b/c // they just get in the way. if (filter) { completionGroups.push(['break', 'case', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'export', 'false', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'let', 'new', 'null', 'return', 'switch', 'this', 'throw', 'true', 'try', 'typeof', 'undefined', 'var', 'void', 'while', 'with', 'yield']); } } function defineDefaultCommands(repl) { // TODO remove me after 0.3.x repl.defineCommand('break', { help: 'Sometimes you get stuck, this gets you out', action: function() { this.bufferedCommand = ''; this.displayPrompt(); } }); var clearMessage; if (repl.useGlobal) { clearMessage = 'Alias for .break'; } else { clearMessage = 'Break, and also clear the local context'; } repl.defineCommand('clear', { help: clearMessage, action: function() { this.bufferedCommand = ''; if (!this.useGlobal) { this.outputStream.write('Clearing context...\n'); this.resetContext(); } this.displayPrompt(); } }); repl.defineCommand('exit', { help: 'Exit the repl', action: function() { this.rli.close(); } }); repl.defineCommand('help', { help: 'Show repl options', action: function() { var self = this; Object.keys(this.commands).sort().forEach(function(name) { var cmd = self.commands[name]; self.outputStream.write(name + '\t' + (cmd.help || '') + '\n'); }); this.displayPrompt(); } }); repl.defineCommand('save', { help: 'Save all evaluated commands in this REPL session to a file', action: function(file) { try { fs.writeFileSync(file, this.lines.join('\n') + '\n'); this.outputStream.write('Session saved to:' + file + '\n'); } catch (e) { this.outputStream.write('Failed to save:' + file + '\n'); } this.displayPrompt(); } }); repl.defineCommand('load', { help: 'Load JS from a file into the REPL session', action: function(file) { try { var stats = fs.statSync(file); if (stats && stats.isFile()) { var self = this; var data = fs.readFileSync(file, 'utf8'); var lines = data.split('\n'); this.displayPrompt(); lines.forEach(function(line) { if (line) { self.rli.write(line + '\n'); } }); } } catch (e) { this.outputStream.write('Failed to load:' + file + '\n'); } this.displayPrompt(); } }); } function trimWhitespace(cmd) { var trimmer = /^\s*(.+)\s*$/m, matches = trimmer.exec(cmd); if (matches && matches.length === 2) { return matches[1]; } return ''; } function regexpEscape(s) { return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); } /** * Converts commands that use var and function () to use the * local exports.context when evaled. This provides a local context * on the REPL. * * @param {String} cmd The cmd to convert. * @return {String} The converted command. */ REPLServer.prototype.convertToContext = function(cmd) { var self = this, matches, scopeVar = /^\s*var\s*([_\w\$]+)(.*)$/m, scopeFunc = /^\s*function\s*([_\w\$]+)/; // Replaces: var foo = "bar"; with: self.context.foo = bar; matches = scopeVar.exec(cmd); if (matches && matches.length === 3) { return 'self.context.' + matches[1] + matches[2]; } // Replaces: function foo() {}; with: foo = function foo() {}; matches = scopeFunc.exec(self.bufferedCommand); if (matches && matches.length === 2) { return matches[1] + ' = ' + self.bufferedCommand; } return cmd; }; /** * Returns `true` if "e" is a SyntaxError, `false` otherwise. * This function filters out false positives likes JSON.parse() errors and * RegExp syntax errors. */ function isSyntaxError(e) { if (!e) return false; // Convert error to string if (process.versions.v8) e = e && (e.stack || e.toString()); else e = e.toString(); return e && e.match(/^SyntaxError/) && // RegExp syntax error !e.match(/^SyntaxError: Invalid regular expression/) && !e.match(/^SyntaxError: Invalid flags supplied to RegExp constructor/) && // "strict mode" syntax errors !e.match(/^SyntaxError: .*strict mode.*/i) && // JSON.parse() error !e.match(/\n {4}at Object.parse \(native\)\n/); } // Copyright & License details are available under JXCORE_LICENSE file // Inspiration for this code comes from Salvatore Sanfilippo's linenoise. // https://github.com/antirez/linenoise // Reference: // * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html // * http://www.3waylabs.com/nw/WWW/products/wizcon/vt220.html var kHistorySize = 30; var kBufSize = 10 * 1024; var util = require('util'); var inherits = require('util').inherits; var EventEmitter = require('events').EventEmitter; exports.createInterface = function(input, output, completer, terminal) { var rl; if (arguments.length === 1) { rl = new Interface(input); } else { rl = new Interface(input, output, completer, terminal); } return rl; }; function Interface(input, output, completer, terminal) { if (!(this instanceof Interface)) { return new Interface(input, output, completer, terminal); } this._sawReturn = false; EventEmitter.call(this); if (arguments.length === 1) { // an options object was given output = input.output; completer = input.completer; terminal = input.terminal; input = input.input; } completer = completer || function() { return []; }; if (typeof completer !== 'function') { throw new TypeError('Argument \'completer\' must be a function'); } // backwards compat; check the isTTY prop of the output stream // when `terminal` was not specified if (typeof terminal == 'undefined') { terminal = !!output.isTTY; } var self = this; this.output = output; this.input = input; // Check arity, 2 - for async, 1 for sync this.completer = completer.length === 2 ? completer : function(v, callback) { callback(null, completer(v)); }; this.setPrompt('> '); this.terminal = !!terminal; function ondata(data) { self._normalWrite(data); } function onend() { self.close(); } function onkeypress(s, key) { self._ttyWrite(s, key); } function onresize() { self._refreshLine(); } if (!this.terminal) { input.on('data', ondata); input.on('end', onend); self.once('close', function() { input.removeListener('data', ondata); input.removeListener('end', onend); }); var StringDecoder = require('string_decoder').StringDecoder; // lazy load this._decoder = new StringDecoder('utf8'); } else { exports.emitKeypressEvents(input); // input usually refers to stdin input.on('keypress', onkeypress); // Current line this.line = ''; this._setRawMode(true); this.terminal = true; // Cursor position on the line. this.cursor = 0; this.history = []; this.historyIndex = -1; output.on('resize', onresize); self.once('close', function() { input.removeListener('keypress', onkeypress); output.removeListener('resize', onresize); }); } input.resume(); } inherits(Interface, EventEmitter); Interface.prototype.__defineGetter__('columns', function() { return this.output.columns || Infinity; }); Interface.prototype.setPrompt = function(prompt, length) { this._prompt = prompt; if (length) { this._promptLength = length; } else { var lines = prompt.split(/[\r\n]/); var lastLine = lines[lines.length - 1]; this._promptLength = lastLine.length; } }; Interface.prototype._setRawMode = function(mode) { if (typeof this.input.setRawMode === 'function') { return this.input.setRawMode(mode); } }; Interface.prototype.prompt = function(preserveCursor) { if (this.paused) this.resume(); if (this.terminal) { if (!preserveCursor) this.cursor = 0; this._refreshLine(); } else { this.output.write(this._prompt); } }; Interface.prototype.question = function(query, cb) { if (typeof cb === 'function') { if (this._questionCallback) { this.prompt(); } else { this._oldPrompt = this._prompt; this.setPrompt(query); this._questionCallback = cb; this.prompt(); } } }; Interface.prototype._onLine = function(line) { if (this._questionCallback) { var cb = this._questionCallback; this._questionCallback = null; this.setPrompt(this._oldPrompt); cb(line); } else { this.emit('line', line); } }; Interface.prototype._addHistory = function() { if (this.line.length === 0) return ''; if (this.history.length === 0 || this.history[0] !== this.line) { this.history.unshift(this.line); // Only store so many if (this.history.length > kHistorySize) this.history.pop(); } this.historyIndex = -1; return this.history[0]; }; Interface.prototype._refreshLine = function() { var columns = this.columns; // line length var line = this._prompt + this.line; var lineLength = line.length; var lineCols = lineLength % columns; var lineRows = (lineLength - lineCols) / columns; // cursor position var cursorPos = this._getCursorPos(); // first move to the bottom of the current line, based on cursor pos var prevRows = this.prevRows || 0; if (prevRows > 0) { exports.moveCursor(this.output, 0, -prevRows); } // Cursor to left edge. exports.cursorTo(this.output, 0); // erase data exports.clearScreenDown(this.output); // Write the prompt and the current buffer content. this.output.write(line); // Force terminal to allocate a new line if (lineCols === 0) { this.output.write(' '); } // Move cursor to original position. exports.cursorTo(this.output, cursorPos.cols); var diff = lineRows - cursorPos.rows; if (diff > 0) { exports.moveCursor(this.output, 0, -diff); } this.prevRows = cursorPos.rows; }; Interface.prototype.close = function() { if (this.closed) return; this.pause(); if (this.terminal) { this._setRawMode(false); } this.closed = true; this.emit('close'); }; Interface.prototype.pause = function() { if (this.paused) return; this.input.pause(); this.paused = true; this.emit('pause'); }; Interface.prototype.resume = function() { if (!this.paused) return; this.input.resume(); this.paused = false; this.emit('resume'); }; Interface.prototype.write = function(d, key) { if (this.paused) this.resume(); this.terminal ? this._ttyWrite(d, key) : this._normalWrite(d); }; // \r\n, \n, or \r followed by something other than \n var lineEnding = /\r?\n|\r(?!\n)/; Interface.prototype._normalWrite = function(b) { if (b === undefined) { return; } var string = this._decoder.write(b); if (this._sawReturn) { string = string.replace(/^\n/, ''); this._sawReturn = false; } if (this._line_buffer) { string = this._line_buffer + string; this._line_buffer = null; } if (lineEnding.test(string)) { this._sawReturn = /\r$/.test(string); // got one or more newlines; process into "line" events var lines = string.split(lineEnding); // either '' or (concievably) the unfinished portion of the next line string = lines.pop(); this._line_buffer = string; lines.forEach(function(line) { this._onLine(line); }, this); } else if (string) { // no newlines this time, save what we have for next time this._line_buffer = string; } }; Interface.prototype._insertString = function(c) { // BUG: Problem when adding tabs with following content. // Perhaps the bug is in _refreshLine(). Not sure. // A hack would be to insert spaces instead of literal '\t'. if (this.cursor < this.line.length) { var beg = this.line.slice(0, this.cursor); var end = this.line.slice(this.cursor, this.line.length); this.line = beg + c + end; this.cursor += c.length; this._refreshLine(); } else { this.line += c; this.cursor += c.length; if (this._getCursorPos().cols === 0) { this._refreshLine(); } else { this.output.write(c); } // a hack to get the line refreshed if it's needed this._moveCursor(0); } }; Interface.prototype._tabComplete = function() { var self = this; self.pause(); self.completer(self.line.slice(0, self.cursor), function(err, rv) { self.resume(); if (err) { // XXX Log it somewhere? return; } var completions = rv[0], completeOn = rv[1]; // the text that was completed if (completions && completions.length) { // Apply/show completions. if (completions.length === 1) { self._insertString(completions[0].slice(completeOn.length)); } else { self.output.write('\r\n'); var width = completions.reduce(function(a, b) { return a.length > b.length ? a : b; }).length + 2; // 2 space padding var maxColumns = Math.floor(self.columns / width) || 1; var group = [], c; for (var i = 0, compLen = completions.length; i < compLen; i++) { c = completions[i]; if (c === '') { handleGroup(self, group, width, maxColumns); group = []; } else { group.push(c); } } handleGroup(self, group, width, maxColumns); // If there is a common prefix to all matches, then apply that // portion. var f = completions.filter(function(e) { if (e) return e; }); var prefix = commonPrefix(f); if (prefix.length > completeOn.length) { self._insertString(prefix.slice(completeOn.length)); } } self._refreshLine(); } }); }; // this = Interface instance function handleGroup(self, group, width, maxColumns) { if (group.length == 0) { return; } var minRows = Math.ceil(group.length / maxColumns); for (var row = 0; row < minRows; row++) { for (var col = 0; col < maxColumns; col++) { var idx = row * maxColumns + col; if (idx >= group.length) { break; } var item = group[idx]; self.output.write(item); if (col < maxColumns - 1) { for (var s = 0, itemLen = item.length; s < width - itemLen; s++) { self.output.write(' '); } } } self.output.write('\r\n'); } self.output.write('\r\n'); } function commonPrefix(strings) { if (!strings || strings.length == 0) { return ''; } var sorted = strings.slice().sort(); var min = sorted[0]; var max = sorted[sorted.length - 1]; for (var i = 0, len = min.length; i < len; i++) { if (min[i] != max[i]) { return min.slice(0, i); } } return min; } Interface.prototype._wordLeft = function() { if (this.cursor > 0) { var leading = this.line.slice(0, this.cursor); var match = leading.match(/([^\w\s]+|\w+|)\s*$/); this._moveCursor(-match[0].length); } }; Interface.prototype._wordRight = function() { if (this.cursor < this.line.length) { var trailing = this.line.slice(this.cursor); var match = trailing.match(/^(\s+|\W+|\w+)\s*/); this._moveCursor(match[0].length); } }; Interface.prototype._deleteLeft = function() { if (this.cursor > 0 && this.line.length > 0) { this.line = this.line.slice(0, this.cursor - 1) + this.line.slice(this.cursor, this.line.length); this.cursor--; this._refreshLine(); } }; Interface.prototype._deleteRight = function() { this.line = this.line.slice(0, this.cursor) + this.line.slice(this.cursor + 1, this.line.length); this._refreshLine(); }; Interface.prototype._deleteWordLeft = function() { if (this.cursor > 0) { var leading = this.line.slice(0, this.cursor); var match = leading.match(/([^\w\s]+|\w+|)\s*$/); leading = leading.slice(0, leading.length - match[0].length); this.line = leading + this.line.slice(this.cursor, this.line.length); this.cursor = leading.length; this._refreshLine(); } }; Interface.prototype._deleteWordRight = function() { if (this.cursor < this.line.length) { var trailing = this.line.slice(this.cursor); var match = trailing.match(/^(\s+|\W+|\w+)\s*/); this.line = this.line.slice(0, this.cursor) + trailing.slice(match[0].length); this._refreshLine(); } }; Interface.prototype._deleteLineLeft = function() { this.line = this.line.slice(this.cursor); this.cursor = 0; this._refreshLine(); }; Interface.prototype._deleteLineRight = function() { this.line = this.line.slice(0, this.cursor); this._refreshLine(); }; Interface.prototype.clearLine = function() { this._moveCursor(+Infinity); this.output.write('\r\n'); this.line = ''; this.cursor = 0; this.prevRows = 0; }; Interface.prototype._line = function() { var line = this._addHistory(); this.clearLine(); this._onLine(line); }; Interface.prototype._historyNext = function() { if (this.historyIndex > 0) { this.historyIndex--; this.line = this.history[this.historyIndex]; this.cursor = this.line.length; // set cursor to end of line. this._refreshLine(); } else if (this.historyIndex === 0) { this.historyIndex = -1; this.cursor = 0; this.line = ''; this._refreshLine(); } }; Interface.prototype._historyPrev = function() { if (this.historyIndex + 1 < this.history.length) { this.historyIndex++; this.line = this.history[this.historyIndex]; this.cursor = this.line.length; // set cursor to end of line. this._refreshLine(); } }; // Returns current cursor's position and line Interface.prototype._getCursorPos = function() { var columns = this.columns; var cursorPos = this.cursor + this._promptLength; var cols = cursorPos % columns; var rows = (cursorPos - cols) / columns; return { cols: cols, rows: rows }; }; // This function moves cursor dx places to the right // (-dx for left) and refreshes the line if it is needed Interface.prototype._moveCursor = function(dx) { var oldcursor = this.cursor; var oldPos = this._getCursorPos(); this.cursor += dx; // bounds check if (this.cursor < 0) this.cursor = 0; if (this.cursor > this.line.length) this.cursor = this.line.length; var newPos = this._getCursorPos(); // check if cursors are in the same line if (oldPos.rows === newPos.rows) { exports.moveCursor(this.output, this.cursor - oldcursor, 0); this.prevRows = newPos.rows; } else { this._refreshLine(); } }; // handle a write from the tty Interface.prototype._ttyWrite = function(s, key) { key = key || {}; // Ignore escape key - Fixes #2876 if (key.name == 'escape') return; if (key.ctrl && key.shift) { /* Control and shift pressed */ switch (key.name) { case 'backspace': this._deleteLineLeft(); break; case 'delete': this._deleteLineRight(); break; } } else if (key.ctrl) { /* Control key pressed */ switch (key.name) { case 'c': if (EventEmitter.listenerCount(this, 'SIGINT') > 0) { this.emit('SIGINT'); } else { // This readline instance is finished this.close(); } break; case 'h': // delete left this._deleteLeft(); break; case 'd': // delete right or EOF if (this.cursor === 0 && this.line.length === 0) { // This readline instance is finished this.close(); } else if (this.cursor < this.line.length) { this._deleteRight(); } break; case 'u': // delete the whole line this.cursor = 0; this.line = ''; this._refreshLine(); break; case 'k': // delete from current to end of line this._deleteLineRight(); break; case 'a': // go to the start of the line this._moveCursor(-Infinity); break; case 'e': // go to the end of the line this._moveCursor(+Infinity); break; case 'b': // back one character this._moveCursor(-1); break; case 'f': // forward one character this._moveCursor(+1); break; case 'l': // clear the whole screen exports.cursorTo(this.output, 0, 0); exports.clearScreenDown(this.output); this._refreshLine(); break; case 'n': // next history item this._historyNext(); break; case 'p': // previous history item this._historyPrev(); break; case 'z': if (process.platform == 'win32') break; if (EventEmitter.listenerCount(this, 'SIGTSTP') > 0) { this.emit('SIGTSTP'); } else { process.once('SIGCONT', (function(self) { return function() { // Don't raise events if stream has already been abandoned. if (!self.paused) { // Stream must be paused and resumed after SIGCONT to catch // SIGINT, SIGTSTP, and EOF. self.pause(); self.emit('SIGCONT'); } // explictly re-enable "raw mode" and move the cursor to // the correct position. // See https://github.com/joyent/node/issues/3295. self._setRawMode(true); self._refreshLine(); }; })(this)); this._setRawMode(false); process.kill(process.pid, 'SIGTSTP'); } break; case 'w': // delete backwards to a word boundary case 'backspace': this._deleteWordLeft(); break; case 'delete': // delete forward to a word boundary this._deleteWordRight(); break; case 'backspace': this._deleteWordLeft(); break; case 'left': this._wordLeft(); break; case 'right': this._wordRight(); break; } } else if (key.meta) { /* Meta key pressed */ switch (key.name) { case 'b': // backward word this._wordLeft(); break; case 'f': // forward word this._wordRight(); break; case 'd': // delete forward word case 'delete': this._deleteWordRight(); break; case 'backspace': // delete backwards to a word boundary this._deleteWordLeft(); break; } } else { /* No modifier keys used */ // \r bookkeeping is only relevant if a \n comes right after. if (this._sawReturn && key.name !== 'enter') this._sawReturn = false; switch (key.name) { case 'return': // carriage return, i.e. \r this._sawReturn = true; this._line(); break; case 'enter': if (this._sawReturn) this._sawReturn = false; else this._line(); break; case 'backspace': this._deleteLeft(); break; case 'delete': this._deleteRight(); break; case 'tab': // tab completion this._tabComplete(); break; case 'left': this._moveCursor(-1); break; case 'right': this._moveCursor(+1); break; case 'home': this._moveCursor(-Infinity); break; case 'end': this._moveCursor(+Infinity); break; case 'up': this._historyPrev(); break; case 'down': this._historyNext(); break; default: if (Buffer.isBuffer(s)) s = s.toString('utf-8'); if (s) { var lines = s.split(/\r\n|\n|\r/); for (var i = 0, len = lines.length; i < len; i++) { if (i > 0) { this._line(); } this._insertString(lines[i]); } } } } }; exports.Interface = Interface; /** * accepts a readable Stream instance and makes it emit "keypress" events */ function emitKeypressEvents(stream) { if (stream._keypressDecoder) return; var StringDecoder = require('string_decoder').StringDecoder; // lazy load stream._keypressDecoder = new StringDecoder('utf8'); function onData(b) { if (EventEmitter.listenerCount(stream, 'keypress') > 0) { var r = stream._keypressDecoder.write(b); if (r) emitKey(stream, r); } else { // Nobody's watching anyway stream.removeListener('data', onData); stream.on('newListener', onNewListener); } } function onNewListener(event) { if (event == 'keypress') { stream.on('data', onData); stream.removeListener('newListener', onNewListener); } } if (EventEmitter.listenerCount(stream, 'keypress') > 0) { stream.on('data', onData); } else { stream.on('newListener', onNewListener); } } exports.emitKeypressEvents = emitKeypressEvents; /* Some patterns seen in terminal key escape codes, derived from combos seen at http://www.midnight-commander.org/browser/lib/tty/key.c ESC letter ESC [ letter ESC [ modifier letter ESC [ 1 ; modifier letter ESC [ num char ESC [ num ; modifier char ESC O letter ESC O modifier letter ESC O 1 ; modifier letter ESC N letter ESC [ [ num ; modifier char ESC [ [ 1 ; modifier letter ESC ESC [ num char ESC ESC O letter - char is usually ~ but $ and ^ also happen with rxvt - modifier is 1 + (shift * 1) + (left_alt * 2) + (ctrl * 4) + (right_alt * 8) - two leading ESCs apparently mean the same as one leading ESC */ // Regexes used for ansi escape code splitting var metaKeyCodeRe = /^(?:\x1b)([a-zA-Z0-9])$/; var functionKeyCodeRe = /^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/; function emitKey(stream, s) { var ch, key = { name: undefined, ctrl: false, meta: false, shift: false }, parts; if (Buffer.isBuffer(s)) { if (s[0] > 127 && s[1] === undefined) { s[0] -= 128; s = '\x1b' + s.toString(stream.encoding || 'utf-8'); } else { s = s.toString(stream.encoding || 'utf-8'); } } key.sequence = s; if (s === '\r') { // carriage return key.name = 'return'; } else if (s === '\n') { // enter, should have been called linefeed key.name = 'enter'; } else if (s === '\t') { // tab key.name = 'tab'; } else if (s === '\b' || s === '\x7f' || s === '\x1b\x7f' || s === '\x1b\b') { // backspace or ctrl+h key.name = 'backspace'; key.meta = (s.charAt(0) === '\x1b'); } else if (s === '\x1b' || s === '\x1b\x1b') { // escape key key.name = 'escape'; key.meta = (s.length === 2); } else if (s === ' ' || s === '\x1b ') { key.name = 'space'; key.meta = (s.length === 2); } else if (s.length === 1 && s <= '\x1a') { // ctrl+letter key.name = String.fromCharCode(s.charCodeAt(0) + 'a'.charCodeAt(0) - 1); key.ctrl = true; } else if (s.length === 1 && s >= 'a' && s <= 'z') { // lowercase letter key.name = s; } else if (s.length === 1 && s >= 'A' && s <= 'Z') { // shift+letter key.name = s.toLowerCase(); key.shift = true; } else if (parts = metaKeyCodeRe.exec(s)) { // meta+character key key.name = parts[1].toLowerCase(); key.meta = true; key.shift = /^[A-Z]$/.test(parts[1]); } else if (parts = functionKeyCodeRe.exec(s)) { // ansi escape sequence // reassemble the key code leaving out leading \x1b's, // the modifier key bitflag and any meaningless "1;" sequence var code = (parts[1] || '') + (parts[2] || '') + (parts[4] || '') + (parts[6] || ''), modifier = (parts[3] || parts[5] || 1) - 1; // Parse the key modifier key.ctrl = !!(modifier & 4); key.meta = !!(modifier & 10); key.shift = !!(modifier & 1); key.code = code; // Parse the key itself switch (code) { /* xterm/gnome ESC O letter */ case 'OP': key.name = 'f1'; break; case 'OQ': key.name = 'f2'; break; case 'OR': key.name = 'f3'; break; case 'OS': key.name = 'f4'; break; /* xterm/rxvt ESC [ number ~ */ case '[11~': key.name = 'f1'; break; case '[12~': key.name = 'f2'; break; case '[13~': key.name = 'f3'; break; case '[14~': key.name = 'f4'; break; /* from Cygwin and used in libuv */ case '[[A': key.name = 'f1'; break; case '[[B': key.name = 'f2'; break; case '[[C': key.name = 'f3'; break; case '[[D': key.name = 'f4'; break; case '[[E': key.name = 'f5'; break; /* common */ case '[15~': key.name = 'f5'; break; case '[17~': key.name = 'f6'; break; case '[18~': key.name = 'f7'; break; case '[19~': key.name = 'f8'; break; case '[20~': key.name = 'f9'; break; case '[21~': key.name = 'f10'; break; case '[23~': key.name = 'f11'; break; case '[24~': key.name = 'f12'; break; /* xterm ESC [ letter */ case '[A': key.name = 'up'; break; case '[B': key.name = 'down'; break; case '[C': key.name = 'right'; break; case '[D': key.name = 'left'; break; case '[E': key.name = 'clear'; break; case '[F': key.name = 'end'; break; case '[H': key.name = 'home'; break; /* xterm/gnome ESC O letter */ case 'OA': key.name = 'up'; break; case 'OB': key.name = 'down'; break; case 'OC': key.name = 'right'; break; case 'OD': key.name = 'left'; break; case 'OE': key.name = 'clear'; break; case 'OF': key.name = 'end'; break; case 'OH': key.name = 'home'; break; /* xterm/rxvt ESC [ number ~ */ case '[1~': key.name = 'home'; break; case '[2~': key.name = 'insert'; break; case '[3~': key.name = 'delete'; break; case '[4~': key.name = 'end'; break; case '[5~': key.name = 'pageup'; break; case '[6~': key.name = 'pagedown'; break; /* putty */ case '[[5~': key.name = 'pageup'; break; case '[[6~': key.name = 'pagedown'; break; /* rxvt */ case '[7~': key.name = 'home'; break; case '[8~': key.name = 'end'; break; /* rxvt keys with modifiers */ case '[a': key.name = 'up'; key.shift = true; break; case '[b': key.name = 'down'; key.shift = true; break; case '[c': key.name = 'right'; key.shift = true; break; case '[d': key.name = 'left'; key.shift = true; break; case '[e': key.name = 'clear'; key.shift = true; break; case '[2$': key.name = 'insert'; key.shift = true; break; case '[3$': key.name = 'delete'; key.shift = true; break; case '[5$': key.name = 'pageup'; key.shift = true; break; case '[6$': key.name = 'pagedown'; key.shift = true; break; case '[7$': key.name = 'home'; key.shift = true; break; case '[8$': key.name = 'end'; key.shift = true; break; case 'Oa': key.name = 'up'; key.ctrl = true; break; case 'Ob': key.name = 'down'; key.ctrl = true; break; case 'Oc': key.name = 'right'; key.ctrl = true; break; case 'Od': key.name = 'left'; key.ctrl = true; break; case 'Oe': key.name = 'clear'; key.ctrl = true; break; case '[2^': key.name = 'insert'; key.ctrl = true; break; case '[3^': key.name = 'delete'; key.ctrl = true; break; case '[5^': key.name = 'pageup'; key.ctrl = true; break; case '[6^': key.name = 'pagedown'; key.ctrl = true; break; case '[7^': key.name = 'home'; key.ctrl = true; break; case '[8^': key.name = 'end'; key.ctrl = true; break; /* misc. */ case '[Z': key.name = 'tab'; key.shift = true; break; default: key.name = 'undefined'; break; } } else if (s.length > 1 && s[0] !== '\x1b') { // Got a longer-than-one string of characters. // Probably a paste, since it wasn't a control sequence. Array.prototype.forEach.call(s, function(c) { emitKey(stream, c); }); return; } // Don't emit a key if no name was found if (key.name === undefined) { key = undefined; } if (s.length === 1) { ch = s; } if (key || ch) { stream.emit('keypress', ch, key); } } /** * moves the cursor to the x and y coordinate on the given stream */ function cursorTo(stream, x, y) { if (typeof x !== 'number' && typeof y !== 'number') return; if (typeof x !== 'number') throw new Error("Can't set cursor row without also setting it's column"); if (typeof y !== 'number') { stream.write('\x1b[' + (x + 1) + 'G'); } else { stream.write('\x1b[' + (y + 1) + ';' + (x + 1) + 'H'); } } exports.cursorTo = cursorTo; /** * moves the cursor relative to its current location */ function moveCursor(stream, dx, dy) { if (dx < 0) { stream.write('\x1b[' + (-dx) + 'D'); } else if (dx > 0) { stream.write('\x1b[' + dx + 'C'); } if (dy < 0) { stream.write('\x1b[' + (-dy) + 'A'); } else if (dy > 0) { stream.write('\x1b[' + dy + 'B'); } } exports.moveCursor = moveCursor; /** * clears the current line the cursor is on: -1 for left of the cursor +1 for * right of the cursor 0 for the entire line */ function clearLine(stream, dir) { if (dir < 0) { // to the beginning stream.write('\x1b[1K'); } else if (dir > 0) { // to the end stream.write('\x1b[0K'); } else { // entire line stream.write('\x1b[2K'); } } exports.clearLine = clearLine; /** * clears the screen from the current position of the cursor down */ function clearScreenDown(stream) { stream.write('\x1b[0J'); } exports.clearScreenDown = clearScreenDown; // Copyright & License details are available under JXCORE_LICENSE file // Query String Utilities var QueryString = exports; // If obj.hasOwnProperty has been overridden, then calling // obj.hasOwnProperty(prop) will break. // See: https://github.com/joyent/node/issues/1707 function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } function charCode(c) { return c.charCodeAt(0); } // a safe fast alternative to decodeURIComponent QueryString.unescapeBuffer = function(s, decodeSpaces) { var out = new Buffer(s.length); var state = 'CHAR'; // states: CHAR, HEX0, HEX1 var n, m, hexchar; for (var inIndex = 0, outIndex = 0; inIndex <= s.length; inIndex++) { var c = s.charCodeAt(inIndex); switch (state) { case 'CHAR': switch (c) { case charCode('%'): n = 0; m = 0; state = 'HEX0'; break; case charCode('+'): if (decodeSpaces) c = charCode(' '); // pass thru default: out[outIndex++] = c; break; } break; case 'HEX0': state = 'HEX1'; hexchar = c; if (charCode('0') <= c && c <= charCode('9')) { n = c - charCode('0'); } else if (charCode('a') <= c && c <= charCode('f')) { n = c - charCode('a') + 10; } else if (charCode('A') <= c && c <= charCode('F')) { n = c - charCode('A') + 10; } else { out[outIndex++] = charCode('%'); out[outIndex++] = c; state = 'CHAR'; break; } break; case 'HEX1': state = 'CHAR'; if (charCode('0') <= c && c <= charCode('9')) { m = c - charCode('0'); } else if (charCode('a') <= c && c <= charCode('f')) { m = c - charCode('a') + 10; } else if (charCode('A') <= c && c <= charCode('F')) { m = c - charCode('A') + 10; } else { out[outIndex++] = charCode('%'); out[outIndex++] = hexchar; out[outIndex++] = c; break; } out[outIndex++] = 16 * n + m; break; } } // TODO support returning arbitrary buffers. return out.slice(0, outIndex - 1); }; QueryString.unescape = function(s, decodeSpaces) { try { return decodeURIComponent(s); } catch (e) { return QueryString.unescapeBuffer(s, decodeSpaces).toString(); } }; QueryString.escape = function(str) { return encodeURIComponent(str); }; var stringifyPrimitive = function(v) { switch (typeof v) { case 'string': return v; case 'boolean': return v ? 'true' : 'false'; case 'number': return isFinite(v) ? v : ''; default: return ''; } }; QueryString.stringify = QueryString.encode = function(obj, sep, eq, name) { sep = sep || '&'; eq = eq || '='; if (obj === null) { obj = undefined; } if (typeof obj === 'object') { return Object.keys(obj).map(function(k) { var ks = QueryString.escape(stringifyPrimitive(k)) + eq; if (Array.isArray(obj[k])) { return obj[k].map(function(v) { return ks + QueryString.escape(stringifyPrimitive(v)); }).join(sep); } else { return ks + QueryString.escape(stringifyPrimitive(obj[k])); } }).join(sep); } if (!name) return ''; return QueryString.escape(stringifyPrimitive(name)) + eq + QueryString.escape(stringifyPrimitive(obj)); }; // Parse a key=val string. QueryString.parse = QueryString.decode = function(qs, sep, eq, options) { sep = sep || '&'; eq = eq || '='; var obj = {}; if (typeof qs !== 'string' || qs.length === 0) { return obj; } var regexp = /\+/g; qs = qs.split(sep); var maxKeys = 1000; if (options && typeof options.maxKeys === 'number') { maxKeys = options.maxKeys; } var len = qs.length; // maxKeys <= 0 means that we should not limit keys count if (maxKeys > 0 && len > maxKeys) { len = maxKeys; } for (var i = 0; i < len; ++i) { var x = qs[i].replace(regexp, '%20'), idx = x.indexOf(eq), kstr, vstr, k, v; if (idx >= 0) { kstr = x.substr(0, idx); vstr = x.substr(idx + 1); } else { kstr = x; vstr = ''; } k = QueryString.unescape(kstr, true); v = QueryString.unescape(vstr, true); if (!hasOwnProperty(obj, k)) { obj[k] = v; } else if (Array.isArray(obj[k])) { obj[k].push(v); } else { obj[k] = [obj[k], v]; } } return obj; }; /*! http://mths.be/punycode v1.2.0 by @mathias */ (function(root) { /** * The `punycode` object. * * @name punycode * @type Object */ var punycode, /** Detect free variables `define`, `exports`, `module` and `require` */ freeDefine = typeof define == 'function' && typeof define.amd == 'object' && define.amd && define, freeExports = typeof exports == 'object' && exports, freeModule = typeof module == 'object' && module, freeRequire = typeof require == 'function' && require, /** Highest positive signed 32-bit float value */ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 /** Bootstring parameters */ base = 36, tMin = 1, tMax = 26, skew = 38, damp = 700, initialBias = 72, initialN = 128, // 0x80 delimiter = '-', // '\x2D' /** Regular expressions */ regexPunycode = /^xn--/, regexNonASCII = /[^ -~]/, // unprintable ASCII chars // + non-ASCII chars regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators /** Error messages */ errors = { 'overflow' : 'Overflow: input needs wider integers to process', 'not-basic' : 'Illegal input >= 0x80 (not a basic code point)', 'invalid-input' : 'Invalid input' }, /** Convenience shortcuts */ baseMinusTMin = base - tMin, floor = Math.floor, stringFromCharCode = String.fromCharCode, /** Temporary variable */ key; /*--------------------------------------------------------------------------*/ /** * A generic error utility function. * * @private * @param {String} * type The error type. * @returns {Error} Throws a `RangeError` with the applicable error message. */ function error(type) { throw new RangeError(errors[type]); } /** * A generic `Array#map` utility function. * * @private * @param {Array} * array The array to iterate over. * @param {Function} * callback The function that gets called for every array item. * @returns {Array} A new array of values returned by the callback function. */ function map(array, fn) { var length = array.length; while (length--) { array[length] = fn(array[length]); } return array; } /** * A simple `Array#map`-like wrapper to work with domain name strings. * * @private * @param {String} * domain The domain name. * @param {Function} * callback The function that gets called for every character. * @returns {Array} A new string of characters returned by the callback * function. */ function mapDomain(string, fn) { return map(string.split(regexSeparators), fn).join('.'); } /** * Creates an array containing the decimal code points of each Unicode * character in the string. While JavaScript uses UCS-2 internally, this * function will convert a pair of surrogate halves (each of which UCS-2 * exposes as separate characters) into a single code point, matching UTF-16. * * @see `punycode.ucs2.encode` * @see * @memberOf punycode.ucs2 * @name decode * @param {String} * string The Unicode input string (UCS-2). * @returns {Array} The new array of code points. */ function ucs2decode(string) { var output = [], counter = 0, length = string.length, value, extra; while (counter < length) { value = string.charCodeAt(counter++); if ((value & 0xF800) == 0xD800 && counter < length) { // high surrogate, and there is a next character extra = string.charCodeAt(counter++); if ((extra & 0xFC00) == 0xDC00) { // low surrogate output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); } else { output.push(value, extra); } } else { output.push(value); } } return output; } /** * Creates a string based on an array of decimal code points. * * @see `punycode.ucs2.decode` * @memberOf punycode.ucs2 * @name encode * @param {Array} * codePoints The array of decimal code points. * @returns {String} The new Unicode string (UCS-2). */ function ucs2encode(array) { return map(array, function(value) { var output = ''; if (value > 0xFFFF) { value -= 0x10000; output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); value = 0xDC00 | value & 0x3FF; } output += stringFromCharCode(value); return output; }).join(''); } /** * Converts a basic code point into a digit/integer. * * @see `digitToBasic()` * @private * @param {Number} * codePoint The basic (decimal) code point. * @returns {Number} The numeric value of a basic code point (for use in * representing integers) in the range `0` to `base - 1`, or `base` * if the code point does not represent a value. */ function basicToDigit(codePoint) { return codePoint - 48 < 10 ? codePoint - 22 : codePoint - 65 < 26 ? codePoint - 65 : codePoint - 97 < 26 ? codePoint - 97 : base; } /** * Converts a digit/integer into a basic code point. * * @see `basicToDigit()` * @private * @param {Number} * digit The numeric value of a basic code point. * @returns {Number} The basic code point whose value (when used for * representing integers) is `digit`, which needs to be in the range * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is * used; else, the lowercase form is used. The behavior is undefined * if flag is non-zero and `digit` has no uppercase form. */ function digitToBasic(digit, flag) { // 0..25 map to ASCII a..z or A..Z // 26..35 map to ASCII 0..9 return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); } /** * Bias adaptation function as per section 3.4 of RFC 3492. * http://tools.ietf.org/html/rfc3492#section-3.4 * * @private */ function adapt(delta, numPoints, firstTime) { var k = 0; delta = firstTime ? floor(delta / damp) : delta >> 1; delta += floor(delta / numPoints); for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { delta = floor(delta / baseMinusTMin); } return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); } /** * Converts a basic code point to lowercase if `flag` is falsy, or to * uppercase if `flag` is truthy. The code point is unchanged if it's * caseless. The behavior is undefined if `codePoint` is not a basic code * point. * * @private * @param {Number} * codePoint The numeric value of a basic code point. * @returns {Number} The resulting basic code point. */ function encodeBasic(codePoint, flag) { codePoint -= (codePoint - 97 < 26) << 5; return codePoint + (!flag && codePoint - 65 < 26) << 5; } /** * Converts a Punycode string of ASCII code points to a string of Unicode code * points. * * @memberOf punycode * @param {String} * input The Punycode string of ASCII code points. * @returns {String} The resulting string of Unicode code points. */ function decode(input) { // Don't use UCS-2 var output = [], inputLength = input.length, out, i = 0, n = initialN, bias = initialBias, basic, j, index, oldi, w, k, digit, t, length, /** Cached calculation results */ baseMinusT; // Handle the basic code points: let `basic` be the number of input code // points before the last delimiter, or `0` if there is none, then copy // the first basic code points to the output. basic = input.lastIndexOf(delimiter); if (basic < 0) { basic = 0; } for (j = 0; j < basic; ++j) { // if it's not a basic code point if (input.charCodeAt(j) >= 0x80) { error('not-basic'); } output.push(input.charCodeAt(j)); } // Main decoding loop: start just after the last delimiter if any basic code // points were copied; start at the beginning otherwise. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* * no final * expression */) { // `index` is the index of the next character to be consumed. // Decode a generalized variable-length integer into `delta`, // which gets added to `i`. The overflow checking is easier // if we increase `i` as we go, then subtract off its starting // value at the end to obtain `delta`. for (oldi = i, w = 1, k = base; /* no condition */; k += base) { if (index >= inputLength) { error('invalid-input'); } digit = basicToDigit(input.charCodeAt(index++)); if (digit >= base || digit > floor((maxInt - i) / w)) { error('overflow'); } i += digit * w; t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (digit < t) { break; } baseMinusT = base - t; if (w > floor(maxInt / baseMinusT)) { error('overflow'); } w *= baseMinusT; } out = output.length + 1; bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`, // incrementing `n` each time, so we'll fix that now: if (floor(i / out) > maxInt - n) { error('overflow'); } n += floor(i / out); i %= out; // Insert `n` at position `i` of the output output.splice(i++, 0, n); } return ucs2encode(output); } /** * Converts a string of Unicode code points to a Punycode string of ASCII code * points. * * @memberOf punycode * @param {String} * input The string of Unicode code points. * @returns {String} The resulting Punycode string of ASCII code points. */ function encode(input) { var n, delta, handledCPCount, basicLength, bias, j, m, q, k, t, currentValue, output = [], /** `inputLength` will hold the number of code points in `input`. */ inputLength, /** Cached calculation results */ handledCPCountPlusOne, baseMinusT, qMinusT; // Convert the input in UCS-2 to Unicode input = ucs2decode(input); // Cache the length inputLength = input.length; // Initialize the state n = initialN; delta = 0; bias = initialBias; // Handle the basic code points for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < 0x80) { output.push(stringFromCharCode(currentValue)); } } handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled; // `basicLength` is the number of basic code points. // Finish the basic string - if it is not empty - with a delimiter if (basicLength) { output.push(delimiter); } // Main encoding loop: while (handledCPCount < inputLength) { // All non-basic code points < n have been handled already. Find the next // larger one: for (m = maxInt, j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue >= n && currentValue < m) { m = currentValue; } } // Increase `delta` enough to advance the decoder's state to , // but guard against overflow handledCPCountPlusOne = handledCPCount + 1; if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { error('overflow'); } delta += (m - n) * handledCPCountPlusOne; n = m; for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < n && ++delta > maxInt) { error('overflow'); } if (currentValue == n) { // Represent delta as a generalized variable-length integer for (q = delta, k = base; /* no condition */; k += base) { t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (q < t) { break; } qMinusT = q - t; baseMinusT = base - t; output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); q = floor(qMinusT / baseMinusT); } output.push(stringFromCharCode(digitToBasic(q, 0))); bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); delta = 0; ++handledCPCount; } } ++delta; ++n; } return output.join(''); } /** * Converts a Punycode string representing a domain name to Unicode. Only the * Punycoded parts of the domain name will be converted, i.e. it doesn't * matter if you call it on a string that has already been converted to * Unicode. * * @memberOf punycode * @param {String} * domain The Punycode domain name to convert to Unicode. * @returns {String} The Unicode representation of the given Punycode string. */ function toUnicode(domain) { return mapDomain(domain, function(string) { return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; }); } /** * Converts a Unicode string representing a domain name to Punycode. Only the * non-ASCII parts of the domain name will be converted, i.e. it doesn't * matter if you call it with a domain that's already in ASCII. * * @memberOf punycode * @param {String} * domain The domain name to convert, as a Unicode string. * @returns {String} The Punycode representation of the given domain name. */ function toASCII(domain) { return mapDomain(domain, function(string) { return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; }); } /*--------------------------------------------------------------------------*/ /** Define the public API */ punycode = { /** * A string representing the current Punycode.js version number. * * @memberOf punycode * @type String */ 'version' : '1.2.0', /** * An object of methods to convert from JavaScript's internal character * representation (UCS-2) to decimal Unicode code points, and back. * * @see * @memberOf punycode * @type Object */ 'ucs2' : { 'decode' : ucs2decode, 'encode' : ucs2encode }, 'decode' : decode, 'encode' : encode, 'toASCII' : toASCII, 'toUnicode' : toUnicode }; /** Expose `punycode` */ if (freeExports) { if (freeModule && freeModule.exports == freeExports) { // in Node.js or Ringo 0.8+ freeModule.exports = punycode; } else { // in Narwhal or Ringo 0.7- for (key in punycode) { punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); } } } else if (freeDefine) { // via curl.js or RequireJS define('punycode', punycode); } else { // in a browser or Rhino root.punycode = punycode; } }(this)); // Copyright & License details are available under JXCORE_LICENSE file var isWindows = process.platform === 'win32' || process.platform == 'winrt'; var util = require('util'); // resolves . and .. elements in a path array with directory names there // must be no slashes, empty elements, or device names (c:\) in the array // (so also no leading and trailing slashes - it does not distinguish // relative and absolute paths) function normalizeArray(parts, allowAboveRoot) { // if the path tries to go above the root, `up` ends up > 0 var up = 0; for (var i = parts.length - 1; i >= 0; i--) { var last = parts[i]; if (last === '.') { parts.splice(i, 1); } else if (last === '..') { parts.splice(i, 1); up++; } else if (up) { parts.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (allowAboveRoot) { for (; up--; up) { parts.unshift('..'); } } return parts; } if (isWindows) { // Regex to split a windows path into three parts: [*, device, slash, // tail] windows-only var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; // Regex to split the tail part of the above into [*, dir, basename, ext] var splitTailRe = /^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/; // Function to split a filename into [root, dir, basename, ext] // windows version var splitPath = function(filename) { // Separate device+slash from tail var result = splitDeviceRe.exec(filename), device = (result[1] || '') + (result[2] || ''), tail = result[3] || ''; // Split the tail into dir, basename and extension var result2 = splitTailRe.exec(tail), dir = result2[1], basename = result2[2], ext = result2[3]; return [device, dir, basename, ext]; }; var normalizeUNCRoot = function(device) { return '\\\\' + device.replace(/^[\\\/]+/, '').replace(/[\\\/]+/g, '\\'); }; // path.resolve([from ...], to) // windows version exports.resolve = function() { var resolvedDevice = '', resolvedTail = '', resolvedAbsolute = false; for (var i = arguments.length - 1; i >= -1; i--) { var path; if (i >= 0) { path = arguments[i]; } else if (!resolvedDevice) { path = process.cwd(); } else { // Windows has the concept of drive-specific current working // directories. If we've resolved a drive letter but not yet an // absolute path, get cwd for that drive. We're sure the device is not // an unc path at this points, because unc paths are always absolute. path = process.env['=' + resolvedDevice]; // Verify that a drive-local cwd was found and that it actually points // to our drive. If not, default to the drive's root. if (!path || path.substr(0, 3).toLowerCase() !== resolvedDevice.toLowerCase() + '\\') { path = resolvedDevice + '\\'; } } // Skip empty and invalid entries if (typeof path !== 'string') { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!path) { continue; } var result = splitDeviceRe.exec(path), device = result[1] || '', isUnc = device && device.charAt(1) !== ':', isAbsolute = !!result[2] || isUnc, // UNC paths are always absolute tail = result[3]; if (device && resolvedDevice && device.toLowerCase() !== resolvedDevice.toLowerCase()) { // This path points to another device so it is not applicable continue; } if (!resolvedDevice) { resolvedDevice = device; } if (!resolvedAbsolute) { resolvedTail = tail + '\\' + resolvedTail; resolvedAbsolute = isAbsolute; } if (resolvedDevice && resolvedAbsolute) { break; } } // Convert slashes to backslashes when `resolvedDevice` points to an UNC // root. Also squash multiple slashes into a single one where appropriate. if (isUnc) { resolvedDevice = normalizeUNCRoot(resolvedDevice); } // At this point the path should be resolved to a full absolute path, // but handle relative paths to be safe (might happen when process.cwd() // fails) // Normalize the tail path function f(p) { return !!p; } resolvedTail = normalizeArray(resolvedTail.split(/[\\\/]+/).filter(f), !resolvedAbsolute).join('\\'); return (resolvedDevice + (resolvedAbsolute ? '\\' : '') + resolvedTail) || '.'; }; // windows version exports.normalize = function(path) { var result = splitDeviceRe.exec(path), device = result[1] || '', isUnc = device && device.charAt(1) !== ':', isAbsolute = !!result[2] || isUnc, // UNC paths are always absolute tail = result[3], trailingSlash = /[\\\/]$/.test(tail); // Normalize the tail path tail = normalizeArray(tail.split(/[\\\/]+/).filter(function(p) { return !!p; }), !isAbsolute).join('\\'); if (!tail && !isAbsolute) { tail = '.'; } if (tail && trailingSlash) { tail += '\\'; } // Convert slashes to backslashes when `device` points to an UNC root. // Also squash multiple slashes into a single one where appropriate. if (isUnc) { device = normalizeUNCRoot(device); } return device + (isAbsolute ? '\\' : '') + tail; }; // windows version exports.join = function() { function f(p) { if (typeof p !== 'string') { throw new TypeError('Arguments to path.join must be strings'); } return p; } var paths = Array.prototype.filter.call(arguments, f); var joined = paths.join('\\'); // Make sure that the joined path doesn't start with two slashes, because // normalize() will mistake it for an UNC path then. // // This step is skipped when it is very clear that the user actually // intended to point at an UNC path. This is assumed when the first // non-empty string arguments starts with exactly two slashes followed by // at least one more non-slash character. // // Note that for normalize() to treat a path as an UNC path it needs to // have at least 2 components, so we don't filter for that here. // This means that the user can use join to construct UNC paths from // a server name and a share name; for example: // path.join('//server', 'share') -> '\\\\server\\share\') if (!/^[\\\/]{2}[^\\\/]/.test(paths[0])) { joined = joined.replace(/^[\\\/]{2,}/, '\\'); } return exports.normalize(joined); }; // path.relative(from, to) // it will solve the relative path from 'from' to 'to', for instance: // from = 'C:\\orandea\\test\\aaa' // to = 'C:\\orandea\\impl\\bbb' // The output of the function should be: '..\\..\\impl\\bbb' // windows version exports.relative = function(from, to) { from = exports.resolve(from); to = exports.resolve(to); // windows is not case sensitive var lowerFrom = from.toLowerCase(); var lowerTo = to.toLowerCase(); function trim(arr) { var start = 0; for (; start < arr.length; start++) { if (arr[start] !== '') break; } var end = arr.length - 1; for (; end >= 0; end--) { if (arr[end] !== '') break; } if (start > end) return []; return arr.slice(start, end - start + 1); } var toParts = trim(to.split('\\')); var lowerFromParts = trim(lowerFrom.split('\\')); var lowerToParts = trim(lowerTo.split('\\')); var length = Math.min(lowerFromParts.length, lowerToParts.length); var samePartsLength = length; for (var i = 0; i < length; i++) { if (lowerFromParts[i] !== lowerToParts[i]) { samePartsLength = i; break; } } if (samePartsLength == 0) { return to; } var outputParts = new Array(); for (var i = samePartsLength; i < lowerFromParts.length; i++) { outputParts.push('..'); } outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join('\\'); }; // path.isAbsolute(path) // determines whether path is an absolute path // windows version exports.isAbsolute = function(path) { var result = splitDeviceRe.exec(path), device = result[1] || '', isUnc = !!device && device[1] !== ':'; return isUnc || !!result[2]; }; exports.sep = '\\'; exports.delimiter = ';'; } else /* posix */ { // Split a filename into [root, dir, basename, ext], unix version // 'root' is just a slash, or nothing. var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; var splitPath = function(filename) { return splitPathRe.exec(filename).slice(1); }; // path.resolve([from ...], to) // posix version exports.resolve = function() { var resolvedPath = '', resolvedAbsolute = false; for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path = (i >= 0) ? arguments[i] : process.cwd(); // Skip empty and invalid entries if (typeof path !== 'string') { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!path) { continue; } resolvedPath = path + '/' + resolvedPath; resolvedAbsolute = path.charAt(0) === '/'; } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path resolvedPath = normalizeArray(resolvedPath.split('/').filter(function(p) { return !!p; }), !resolvedAbsolute).join('/'); return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; }; // path.normalize(path) // posix version exports.normalize = function(path) { var isAbsolute = path.charAt(0) === '/', trailingSlash = path.substr(-1) === '/'; // Normalize the path path = normalizeArray(path.split('/').filter(function(p) { return !!p; }), !isAbsolute).join('/'); if (!path && !isAbsolute) { path = '.'; } if (path && trailingSlash) { path += '/'; } return (isAbsolute ? '/' : '') + path; }; // posix version exports.join = function() { var paths = Array.prototype.slice.call(arguments, 0); return exports.normalize(paths.filter(function(p, index) { if (typeof p !== 'string') { throw new TypeError('Arguments to path.join must be strings'); } return p; }).join('/')); }; // path.relative(from, to) // posix version exports.relative = function(from, to) { from = exports.resolve(from).substr(1); to = exports.resolve(to).substr(1); function trim(arr) { var start = 0; for (; start < arr.length; start++) { if (arr[start] !== '') break; } var end = arr.length - 1; for (; end >= 0; end--) { if (arr[end] !== '') break; } if (start > end) return []; return arr.slice(start, end - start + 1); } var fromParts = trim(from.split('/')); var toParts = trim(to.split('/')); var length = Math.min(fromParts.length, toParts.length); var samePartsLength = length; for (var i = 0; i < length; i++) { if (fromParts[i] !== toParts[i]) { samePartsLength = i; break; } } var outputParts = new Array(); for (var i = samePartsLength; i < fromParts.length; i++) { outputParts.push('..'); } outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join('/'); }; // path.isAbsolute(path) // posix version exports.isAbsolute = function(path) { return path.charAt(0) === '/'; }; exports.sep = '/'; exports.delimiter = ':'; } exports.dirname = function(path) { var result = splitPath(path), root = result[0], dir = result[1]; if (!root && !dir) { // No dirname whatsoever return '.'; } if (dir) { // It has a dirname, strip trailing slash dir = dir.substr(0, dir.length - 1); } return root + dir; }; exports.basename = function(path, ext) { var f = splitPath(path)[2]; // TODO: make this comparison case-insensitive on windows? if (ext && f.substr(-1 * ext.length) === ext) { f = f.substr(0, f.length - ext.length); } return f; }; exports.extname = function(path) { return splitPath(path)[3]; }; exports.exists = util.deprecate(function(path, callback) { require('fs').exists(path, callback); }, 'path.exists is now called `fs.exists`.'); exports.existsSync = util.deprecate(function(path) { return require('fs').existsSync(path); }, 'path.existsSync is now called `fs.existsSync`.'); if (isWindows) { exports._makeLong = function(path) { // Note: this will *probably* throw somewhere. if (typeof path !== 'string') return path; if (!path) { return ''; } var resolvedPath = exports.resolve(path); if (/^[a-zA-Z]\:\\/.test(resolvedPath)) { // path is local filesystem path, which needs to be converted // to long UNC path. return '\\\\?\\' + resolvedPath; } else if (/^\\\\[^?.]/.test(resolvedPath)) { // path is network UNC path, which needs to be converted // to long UNC path. return '\\\\?\\UNC\\' + resolvedPath.substring(2); } return path; }; } else { exports._makeLong = function(path) { return path; }; } // Copyright & License details are available under JXCORE_LICENSE file var binding = process.binding('os'); var util = require('util'); exports.endianness = binding.getEndianness; exports.hostname = binding.getHostname; exports.loadavg = binding.getLoadAvg; exports.uptime = binding.getUptime; exports.freemem = binding.getFreeMem; exports.totalmem = binding.getTotalMem; exports.cpus = binding.getCPUs; exports.type = binding.getOSType; exports.release = binding.getOSRelease; exports.networkInterfaces = binding.getInterfaceAddresses; exports.arch = function() { return process.arch; }; exports.platform = function() { return process.platform; }; exports.tmpdir = function() { var tmp_dir = process.env.TMPDIR || process.env.TMP || process.env.TEMP || (process.platform === 'win32' ? 'c:\\windows\\temp' : null); if (!tmp_dir) { if (process.userPath) return process.userPath; return '/tmp'; } return tmp_dir; }; exports.tmpDir = exports.tmpdir; exports.getNetworkInterfaces = util.deprecate(function() { return exports.networkInterfaces(); }, 'getNetworkInterfaces is now called `os.networkInterfaces`.'); exports.EOL = process.platform === 'win32' ? '\r\n' : '\n'; // Copyright & License details are available under JXCORE_LICENSE file var events = require('events'); var stream = require('stream'); var timers = require('_jx_timers'); var util = require('util'); var assert = require('assert'); var cares = process.binding('cares_wrap'); var cluster; var port_features = new Array(); function noop() { } // constructor for lazy loading function createPipe() { var Pipe = process.binding('pipe_wrap').Pipe; return new Pipe(); } // constructor for lazy loading function createTCP() { var TCP = process.binding('tcp_wrap').TCP; return new TCP(); } function createHandle(fd) { var tty = process.binding('tty_wrap'); var type = tty.guessHandleType(fd); if (type === 'PIPE') return createPipe(); if (type === 'TCP') return createTCP(); throw new TypeError('Unsupported fd type: ' + type); } var debug; if (process.env.NODE_DEBUG && /net/.test(process.env.NODE_DEBUG)) { var pid = process.pid; debug = function(x) { // if console is not set up yet, then skip this. if (!console.error) return; console.error('NET: %d', pid, util.format.apply(util, arguments).slice(0, 500)); }; } else { debug = function() { }; } function isPipeName(s) { return typeof s === 'string' && toNumber(s) === false; } exports.createServer = function() { return new Server(arguments[0], arguments[1]); }; // Target API: // // var s = net.connect({port: 80, host: 'google.com'}, function() { // ... // }); // // There are various forms: // // connect(options, [cb]) // connect(port, [host], [cb]) // connect(path, [cb]); // exports.connect = exports.createConnection = function() { var args = normalizeConnectArgs(arguments); var s = new Socket(args[0]); return Socket.prototype.connect.apply(s, args); }; // Returns an array [options] or [options, cb] // It is the same as the argument of Socket.prototype.connect(). function normalizeConnectArgs(args) { var options = {}; if (typeof args[0] === 'object') { // connect(options, [cb]) options = args[0]; } else if (isPipeName(args[0])) { // connect(path, [cb]); options.path = args[0]; } else { // connect(port, [host], [cb]) options.port = args[0]; if (typeof args[1] === 'string') { options.host = args[1]; } } var cb = args[args.length - 1]; return (typeof cb === 'function') ? [options, cb] : [options]; } exports._normalizeConnectArgs = normalizeConnectArgs; // called when creating new Socket, or when re-using a closed Socket function initSocketHandle(self) { self.destroyed = false; self.bytesRead = 0; self._bytesDispatched = 0; // Handle creation may be deferred to bind() or connect() time. if (self._handle) { self._handle.owner = self; self._handle.onread = onread; } } function Socket(options) { if (!(this instanceof Socket)) return new Socket(options); this._connecting = false; this._handle = null; switch (typeof options) { case 'number': options = { fd: options }; // Legacy interface. break; case 'undefined': options = {}; break; } stream.Duplex.call(this, options); if (options.handle) { this._handle = options.handle; // private } else if (typeof options.fd !== 'undefined') { this._handle = createHandle(options.fd); this._handle.open(options.fd); this.readable = options.readable !== false; this.writable = options.writable !== false; } else { // these will be set once there is a connection this.readable = this.writable = false; } this.onend = null; // shut down the socket when we're finished with it. this.on('finish', onSocketFinish); this.on('_socketEnd', onSocketEnd); initSocketHandle(this); this._pendingData = null; this._pendingEncoding = ''; // handle strings directly this._writableState.decodeStrings = false; // default to *not* allowing half open sockets this.allowHalfOpen = options && options.allowHalfOpen || false; // if we have a handle, then start the flow of data into the // buffer. if not, then this will happen when we connect if (this._handle && options.readable !== false) this.read(0); } util.inherits(Socket, stream.Duplex); // the user has called .end(), and all the bytes have been // sent out to the other side. // If allowHalfOpen is false, or if the readable side has // ended already, then destroy. // If allowHalfOpen is true, then we need to do a shutdown, // so that only the writable side will be cleaned up. function onSocketFinish() { // If still connecting - defer handling 'finish' until 'connect' will happen if (this._connecting) { debug('osF: not yet connected'); return this.once('connect', onSocketFinish); } debug('onSocketFinish'); if (!this.readable || this._readableState.ended) { debug('oSF: ended, destroy', this._readableState); return this.destroy(); } debug('oSF: not ended, call shutdown()'); // otherwise, just shutdown, or destroy() if not possible if (!this._handle || !this._handle.shutdown) return this.destroy(); var shutdownReq = this._handle.shutdown(); if (!shutdownReq) return this._destroy(errnoException(process._errno, 'shutdown')); shutdownReq.oncomplete = afterShutdown; } function afterShutdown(status, handle, req) { var self = handle.owner; debug('afterShutdown destroyed=%j', self.destroyed, self._readableState); // callback may come after call to destroy. if (self.destroyed) return; if (self._readableState.ended) { debug('readableState ended, destroying'); self.destroy(); } else { self.once('_socketEnd', self.destroy); } } // the EOF has been received, and no more bytes are coming. // if the writable side has ended already, then clean everything // up. function onSocketEnd() { // XXX Should not have to do as much crap in this function. // ended should already be true, since this is called *after* // the EOF errno and onread has eof'ed debug('onSocketEnd', this._readableState); this._readableState.ended = true; if (this._readableState.endEmitted) { this.readable = false; maybeDestroy(this); } else { this.once('end', function() { this.readable = false; maybeDestroy(this); }); this.read(0); } if (!this.allowHalfOpen) { this.write = writeAfterFIN; this.destroySoon(); } } // Provide a better error message when we call end() as a result // of the other side sending a FIN. The standard 'write after end' // is overly vague, and makes it seem like the user's code is to blame. function writeAfterFIN(chunk, encoding, cb) { if (typeof encoding === 'function') { cb = encoding; encoding = null; } var er = new Error('This socket has been ended by the other party'); er.code = 'EPIPE'; var self = this; // TODO: defer error events consistently everywhere, not just the cb self.emit('error', er); if (typeof cb === 'function') { process.nextTick(function() { cb(er); }); } } exports.Socket = Socket; exports.Stream = Socket; // Legacy naming. Socket.prototype.read = function(n) { if (n === 0) return stream.Readable.prototype.read.call(this, n); this.read = stream.Readable.prototype.read; this._consuming = true; return this.read(n); }; Socket.prototype.listen = function() { debug('socket.listen'); var self = this; self.on('connection', arguments[0]); listen(self, null, null, null); }; Socket.prototype.setTimeout = function(msecs, callback) { if (msecs > 0 && global.isFinite(msecs)) { timers.enroll(this, msecs); if (!this.__ec_int) { // non-jx timers timers._unrefActive(this); } if (callback) { this.once('timeout', callback); } } else if (msecs === 0) { timers.unenroll(this); if (callback) { this.removeListener('timeout', callback); } } }; Socket.prototype._onTimeout = function() { debug('_onTimeout'); this.emit('timeout'); }; Socket.prototype.setNoDelay = function(enable) { // backwards compatibility: assume true when `enable` is omitted if (this._handle && this._handle.setNoDelay) this._handle.setNoDelay(typeof enable === 'undefined' ? true : !!enable); }; Socket.prototype.setKeepAlive = function(setting, msecs) { if (this._handle && this._handle.setKeepAlive) this._handle.setKeepAlive(setting, ~~(msecs / 1000)); }; Socket.prototype.address = function() { if (this._handle && this._handle.getsockname) { return this._handle .getsockname(); } return null; }; Object.defineProperty(Socket.prototype, 'readyState', { get: function() { if (this._connecting) { return 'opening'; } else if (this.readable && this.writable) { return 'open'; } else if (this.readable && !this.writable) { return 'readOnly'; } else if (!this.readable && this.writable) { return 'writeOnly'; } else { return 'closed'; } } }); Object.defineProperty(Socket.prototype, 'bufferSize', { get: function() { if (this._handle) { return this._handle.writeQueueSize + this._writableState.length; } } }); // Just call handle.readStart until we have enough in the buffer Socket.prototype._read = function(n) { debug('_read'); if (this._connecting || !this._handle) { debug('_read wait for connection'); this.once('connect', this._read.bind(this, n)); } else if (!this._handle.reading) { // not already reading, start the flow debug('Socket._read readStart'); this._handle.reading = true; var r = this._handle.readStart(); if (r) this._destroy(errnoException(process._errno, 'read')); } }; Socket.prototype.end = function(data, encoding) { stream.Duplex.prototype.end.call(this, data, encoding); this.writable = false; if (process.enableDTRACE) { ; } // just in case we're waiting for an EOF. if (this.readable && !this._readableState.endEmitted) this.read(0); else maybeDestroy(this); }; // Call whenever we set writable=false or readable=false function maybeDestroy(socket) { if (!socket.readable && !socket.writable && !socket.destroyed && !socket._connecting && !socket._writableState.length) { socket.destroy(); } } Socket.prototype.destroySoon = function() { if (this.writable) this.end(); if (this._writableState.finished) this.destroy(); else this.once('finish', this.destroy); }; Socket.prototype._destroy = function(exception, cb) { debug('destroy'); var self = this; function fireErrorCallbacks() { if (cb) cb(exception); if (exception && !self._writableState.errorEmitted) { process.nextTick(function() { self.emit('error', exception); }); self._writableState.errorEmitted = true; } }; if (this.destroyed) { debug('already destroyed, fire error callbacks'); fireErrorCallbacks(); return; } self._connecting = false; this.readable = this.writable = false; timers.unenroll(this); debug('close'); if (this._handle) { if (this !== process.stderr) debug('close handle'); var isException = exception ? true : false; this._handle.close(function() { debug('emit close'); self.emit('close', isException); }); this._handle.onread = noop; this._handle = null; } // we set destroyed to true before firing error callbacks in order // to make it re-entrance safe in case Socket.prototype.destroy() // is called within callbacks this.destroyed = true; fireErrorCallbacks(); if (this.server) { if (process.enableDTRACE) { ; } debug('has server'); this.server._connections--; if (this.server._emitCloseIfDrained) { this.server._emitCloseIfDrained(); } } }; Socket.prototype.destroy = function(exception) { debug('destroy', exception); this._destroy(exception); }; // This function is called whenever the handle gets a // buffer, or when there's an error reading. function onread(buffer, offset, length, __skip, parser_response) { var handle = this; var self = handle.owner; assert(handle === self._handle, 'handle != self._handle'); timers._unrefActive(self); debug('onread', process._errno, offset, length); if (buffer) { debug('got data'); // read success. // In theory (and in practice) calling readStop right now // will prevent this from being called again until _read() gets // called again. // if we didn't get any bytes, that doesn't necessarily mean EOF. // wait for the next one. var end = offset + length; if (offset === end) { debug('not any data, keep waiting'); return; } // if it's not enough data, we'll just call handle.readStart() // again right away. self.bytesRead += length; // Optimization: emit the original buffer with end points var ret = true; if (self.ondata) { self.ondata(buffer, offset, end, parser_response); } else ret = self.push(buffer.slice(offset, end)); if (handle.reading && !ret) { handle.reading = false; debug('readStop'); var r = handle.readStop(); if (r) self._destroy(errnoException(process._errno, 'read')); } return; } var er = process._errno; if (er == 'EOF') { debug('EOF'); if (self._readableState.length === 0) { self.readable = false; maybeDestroy(self); } if (self.onend) self.once('end', self.onend); // push a null to signal the end of data. self.push(null); // internal end event so that we know that the actual socket // is no longer readable, and we can start the shutdown // procedure. No need to wait for all the data to be consumed. self.emit('_socketEnd'); } else { debug('error', er); // Error self._destroy(errnoException(er, 'read')); } } Socket.prototype._getpeername = function() { if (!this._handle || !this._handle.getpeername) { return {}; } if (!this._peername) { this._peername = this._handle.getpeername(); // getpeername() returns null on error if (this._peername === null) { return {}; } } return this._peername; }; Socket.prototype.__defineGetter__('remoteAddress', function() { return this._getpeername().address; }); Socket.prototype.__defineGetter__('remotePort', function() { return this._getpeername().port; }); Socket.prototype._getsockname = function() { if (!this._handle || !this._handle.getsockname) { return {}; } if (!this._sockname) { this._sockname = this._handle.getsockname(); if (this._sockname === null) { return {}; } } return this._sockname; }; Socket.prototype.__defineGetter__('localAddress', function() { return this._getsockname().address; }); Socket.prototype.__defineGetter__('localPort', function() { return this._getsockname().port; }); Socket.prototype.write = function(chunk, encoding, cb) { if (typeof chunk !== 'string' && !Buffer.isBuffer(chunk)) throw new TypeError('invalid data'); return stream.Duplex.prototype.write.apply(this, arguments); }; Socket.prototype._write = function(data, encoding, cb) { // If we are still connecting, then buffer this for later. // The Writable logic will buffer up any more writes while // waiting for this one to be done. if (this._connecting) { this._pendingData = data; this._pendingEncoding = encoding; this.once('connect', function() { this._write(data, encoding, cb); }); return; } this._pendingData = null; this._pendingEncoding = ''; timers._unrefActive(this); if (!this._handle) { this._destroy(new Error('This socket is closed.'), cb); return false; } var enc = Buffer.isBuffer(data) ? 'buffer' : encoding; var writeReq = createWriteReq(this._handle, data, enc); if (!writeReq || typeof writeReq !== 'object') return this._destroy(errnoException(process._errno, 'write'), cb); writeReq.oncomplete = afterWrite; this._bytesDispatched += writeReq.bytes; // If it was entirely flushed, we can write some more right now. // However, if more is left in the queue, then wait until that clears. if (this._handle.writeQueueSize === 0) cb(); else writeReq.cb = cb; }; function createWriteReq(handle, data, encoding) { switch (encoding) { case 'buffer': return handle.writeBuffer(data); case 'utf8': case 'utf-8': return handle.writeUtf8String(data); case 'ascii': return handle.writeAsciiString(data); case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return handle.writeUcs2String(data); default: return handle.writeBuffer(new Buffer(data, encoding)); } } Socket.prototype.__defineGetter__('bytesWritten', function() { var bytes = this._bytesDispatched, state = this._writableState, data = this._pendingData, encoding = this._pendingEncoding; state.buffer.forEach(function(el) { if (Buffer.isBuffer(el.chunk)) bytes += el.chunk.length; else bytes += Buffer.byteLength(el.chunk, el.encoding); }); if (data) { if (Buffer.isBuffer(data)) bytes += data.length; else bytes += Buffer.byteLength(data, encoding); } return bytes; }); function afterWrite(status, handle, req) { var self = handle.owner; var state = self._writableState; if (self !== process.stderr && self !== process.stdout) debug('afterWrite', status, req); // callback may come after call to destroy. if (self.destroyed) { debug('afterWrite destroyed'); return; } if (status) { debug('write failure', errnoException(process._errno, 'write')); self._destroy(errnoException(process._errno, 'write'), req.cb); return; } timers._unrefActive(self); if (self !== process.stderr && self !== process.stdout) debug('afterWrite call cb'); if (req.cb) req.cb.call(self); } function connect(self, address, port, addressType, localAddress) { // TODO return promise from Socket.prototype.connect which // wraps _connectReq. assert.ok(self._connecting); if (localAddress) { var r; if (addressType == 6) { r = self._handle.bind6(localAddress); } else { r = self._handle.bind(localAddress); } if (r) { self._destroy(errnoException(process._errno, 'bind')); return; } } var connectReq; if (addressType == 6) { connectReq = self._handle.connect6(address, port); } else if (addressType == 4) { connectReq = self._handle.connect(address, port); } else { connectReq = self._handle.connect(address, afterConnect); } if (connectReq !== null) { connectReq.oncomplete = afterConnect; } else { self._destroy(errnoException(process._errno, 'connect')); } } Socket.prototype.connect = function(options, cb) { if (this.write !== Socket.prototype.write) this.write = Socket.prototype.write; if (typeof options !== 'object') { // Old API: // connect(port, [host], [cb]) // connect(path, [cb]); var args = normalizeConnectArgs(arguments); return Socket.prototype.connect.apply(this, args); } if (this.destroyed) { this._readableState.reading = false; this._readableState.ended = false; this._readableState.endEmitted = false; this._writableState.ended = false; this._writableState.ending = false; this._writableState.finished = false; this.destroyed = false; this._handle = null; } var self = this; var pipe = !!options.path; if (!this._handle) { this._handle = pipe ? createPipe() : createTCP(); initSocketHandle(this); } if (typeof cb === 'function') { self.once('connect', cb); } timers._unrefActive(this); self._connecting = true; self.writable = true; if (pipe) { connect(self, options.path); } else if (!options.host) { debug('connect: missing host'); connect(self, '127.0.0.1', options.port, 4); } else { var host = options.host; debug('connect: find host ' + host); require('dns').lookup(host, function(err, ip, addressType) { self.emit('lookup', err, ip, addressType); // It's possible we were destroyed while looking this up. // XXX it would be great if we could cancel the promise returned by // the look up. if (!self._connecting) return; if (err) { // net.createConnection() creates a net.Socket object and // immediately calls net.Socket.connect() on it (that's us). // There are no event listeners registered yet so defer the // error event to the next tick. process.nextTick(function() { self.emit('error', err); self._destroy(); }); } else { timers._unrefActive(self); addressType = addressType || 4; // node_net.cc handles null host names graciously but user land // expects remoteAddress to have a meaningful value ip = ip || (addressType === 4 ? '127.0.0.1' : '0:0:0:0:0:0:0:1'); connect(self, ip, options.port, addressType, options.localAddress); } }); } return self; }; Socket.prototype.ref = function() { if (this._handle) this._handle.ref(); }; Socket.prototype.unref = function() { if (this._handle) this._handle.unref(); }; function afterConnect(status, handle, req, readable, writable) { var self = handle.owner; // callback may come after call to destroy if (self.destroyed) { return; } assert(handle === self._handle, 'handle != self._handle'); debug('afterConnect'); assert.ok(self._connecting); self._connecting = false; if (status == 0) { self.readable = readable; self.writable = writable; timers._unrefActive(self); self.emit('connect'); // start the first read, or get an immediate EOF. // this doesn't actually consume any bytes, because len=0. if (readable) self.read(0); } else { self._connecting = false; self._destroy(errnoException(process._errno, 'connect')); } } function errnoException(errorno, syscall) { // TODO make this more compatible with ErrnoException from src/node.cc // Once all of Node is using this function the ErrnoException from // src/node.cc should be removed. var e = new Error(syscall + ' ' + errorno); e.errno = e.code = errorno; e.syscall = syscall; return e; } function Server(/* [ options, ] listener */) { if (!(this instanceof Server)) return new Server(arguments[0], arguments[1]); events.EventEmitter.call(this); var self = this; var options; if (typeof arguments[0] == 'function') { options = {}; self.on('connection', arguments[0]); } else { options = arguments[0] || {}; if (typeof arguments[1] == 'function') { self.on('connection', arguments[1]); } } this._connections = 0; Object.defineProperty(this, 'connections', { get: util.deprecate(function() { if (self._usingSlaves) { return null; } return self._connections; }, 'connections property is deprecated. Use getConnections() method'), set: util.deprecate(function(val) { return (self._connections = val); }, 'connections property is deprecated. Use getConnections() method'), configurable: true, enumerable: true }); this._handle = null; this._usingSlaves = false; this._slaves = new Array(); this.allowHalfOpen = options.allowHalfOpen || false; } util.inherits(Server, events.EventEmitter); exports.Server = Server; function toNumber(x) { return (x = global.Number(x)) >= 0 ? x : false; } var createServerHandle = exports._createServerHandle = function(address, port, addressType, fd, secured) { var r = 0; // assign handle in listen, and clean up if bind or listen fails var handle; if (typeof fd === 'number' && fd >= 0) { try { handle = createHandle(fd); } catch (e) { // Not a fd we can listen on. This will trigger an error. debug('listen invalid fd=' + fd + ': ' + e.message); process._errno = 'EINVAL'; // hack, callers expect that errno is set return null; } handle.open(fd); handle.readable = true; handle.writable = true; return handle; } else if (port == -1 && addressType == -1) { handle = createPipe(); if (process.platform === 'win32') { var instances = parseInt(process.env.NODE_PENDING_PIPE_INSTANCES); if (!isNaN(instances)) { handle.setPendingInstances(instances); } } } else { handle = createTCP(); } if (address || port) { debug('bind to ' + address); if (addressType == 6) { r = handle.bind6(address, port, secured); } else { r = handle.bind(address, port, secured); } } if (r) { handle.close(); handle = null; } return handle; }; Server.prototype._listen2 = function(address, port, addressType, backlog, fd) { debug('listen2', address, port, addressType, backlog); var self = this; var r = 0; // If there is not yet a handle, we need to create one and bind. // In the case of a server sent via IPC, we don't need to do this. if (!self._handle) { debug('_listen2: create a handle'); self._handle = createServerHandle(address, port, addressType, fd, this.key && this.cert); if (!self._handle) { var error = errnoException(process._errno, 'listen'); process.nextTick(function() { self.emit('error', error); }); return; } } else { debug('_listen2: have a handle already'); } self._handle.onconnection = onconnection; self._handle.owner = self; // The port_features trick, and the corresponding logic that it activates // in libuv, forces sockets to be reused across instances for any given port. // Presumably this is intended to make tcp/http server code work with // JXcore multithreading without any modification. However it makes strong // assumptions on how such user code is written and in fact if a socket is // explicitly closed, the next time we listen on the same port we end up // listening on a bad file descriptor (EBADF). // For the above reasons, we disable this logic when we are on a restartable // instance. var _port = -1; if (process.isRestartableInstance !== true) { if (!port_features[port]) { _port = port; port_features[port] = 1; } } // Use a backlog of 512 entries. We pass 511 to the listen() call because // the kernel does: backlogsize = roundup_pow_of_two(backlogsize + 1); // which will thus give us a backlog of 512 entries. r = self._handle.listen(backlog || 1023, _port, this.key && this.cert); if (r) { var ex = errnoException(process._errno, 'listen'); self._handle.close(); self._handle = null; process.nextTick(function() { self.emit('error', ex); }); return; } // generate connection key, this should be unique to the connection this._connectionKey = addressType + ':' + address + ':' + port; process.nextTick(function() { self.emit('listening'); }); }; function listen(self, address, port, addressType, backlog, fd) { if (!cluster) cluster = require('cluster'); if (cluster.isMaster) { self._listen2(address, port, addressType, backlog, fd); return; } cluster._getServer(self, address, port, addressType, fd, function(handle, err) { // EACCESS and friends if (err) { self.emit('error', errnoException(err, 'bind')); return; } // Some operating systems (notably OS X and Solaris) don't report // EADDRINUSE errors right away. libuv mimics that behavior for the // sake of platform consistency but that means we have have a socket on // our hands that is not actually bound. That's why we check if the // actual port matches what we requested and if not, raise an error. // The exception is when port == 0 because that means "any random // port". if (port && handle.getsockname && port != handle.getsockname().port) { self.emit('error', errnoException('EADDRINUSE', 'bind')); return; } self._handle = handle; self._listen2(address, port, addressType, backlog, fd); }); } Server.prototype.listen = function() { var self = this; var lastArg = arguments[arguments.length - 1]; if (typeof lastArg == 'function') { self.once('listening', lastArg); } var port = toNumber(arguments[0]); // The third optional argument is the backlog size. // When the ip is omitted it can be the second argument. var backlog = toNumber(arguments[1]) || toNumber(arguments[2]); var TCP = process.binding('tcp_wrap').TCP; if (arguments.length == 0 || typeof arguments[0] == 'function') { // Bind to a random port. listen(self, '0.0.0.0', 0, null, backlog); } else if (arguments[0] && typeof arguments[0] === 'object') { var h = arguments[0]; if (h._handle) { h = h._handle; } else if (h.handle) { h = h.handle; } if (h instanceof TCP) { self._handle = h; listen(self, null, -1, -1, backlog); } else if (typeof h.fd === 'number' && h.fd >= 0) { listen(self, null, null, null, backlog, h.fd); } else { throw new Error('Invalid listen argument: ' + h); } } else if (isPipeName(arguments[0])) { // UNIX socket or Windows pipe. var pipeName = self._pipeName = arguments[0]; listen(self, pipeName, -1, -1, backlog); } else if (typeof arguments[1] == 'undefined' || typeof arguments[1] == 'function' || typeof arguments[1] == 'number') { // The first argument is the port, no IP given. listen(self, '0.0.0.0', port, 4, backlog); } else { // The first argument is the port, the second an IP. require('dns').lookup(arguments[1], function(err, ip, addressType) { if (err) { self.emit('error', err); } else { listen(self, ip || '0.0.0.0', port, ip ? addressType : 4, backlog); } }); } return self; }; Server.prototype.address = function() { if (this._handle && this._handle.getsockname) { return this._handle.getsockname(); } else if (this._pipeName) { return this._pipeName; } else { return null; } }; var lastErrorView = Date.now(); var lastErrNo = 0; function onconnection(clientHandle) { var handle = this; var self = handle.owner; debug('onconnection'); if (!clientHandle) { if (Date.now() - lastErrorView > 3000 || lastErrNo != process._errno) { // in // case // of // simultaneous // errors // keep // server // from // spending // everything // on // console // stream lastErrorView = Date.now(); lastErrNo = process._errno; self.emit('error', errnoException(process._errno, 'accept')); } return; } if (self.maxConnections && self._connections >= self.maxConnections) { clientHandle.close(); return; } var socket = new Socket({ handle: clientHandle, allowHalfOpen: self.allowHalfOpen }); socket.readable = socket.writable = true; self._connections++; socket.server = self; if (process.enableDTRACE) { ; ; } self.emit('connection', socket); } Server.prototype.getConnections = function(cb) { function end(err, connections) { process.nextTick(function() { cb(err, connections); }); } if (!this._usingSlaves) { return end(null, this._connections); } // Poll slaves var left = this._slaves.length, total = this._connections; function oncount(err, count) { if (err) { left = -1; return end(err); } total += count; if (--left === 0) return end(null, total); } this._slaves.forEach(function(slave) { slave.getConnections(oncount); }); }; Server.prototype.close = function(cb) { function onSlaveClose() { if (--left !== 0) return; self._connections = 0; self._emitCloseIfDrained(); } if (!this._handle) { // Throw error. Follows net_legacy behaviour. throw new Error('Not running'); } if (cb) { this.once('close', cb); } this._handle.close(); this._handle = null; if (this._usingSlaves) { var self = this, left = this._slaves.length; // Increment connections to be sure that, even if all sockets will be closed // during polling of slaves, `close` event will be emitted only once. this._connections++; // Poll slaves this._slaves.forEach(function(slave) { slave.close(onSlaveClose); }); } else { this._emitCloseIfDrained(); } return this; }; Server.prototype._emitCloseIfDrained = function() { debug('SERVER _emitCloseIfDrained'); var self = this; if (self._handle || self._connections) { debug('SERVER handle? %j connections? %d', !!self._handle, self._connections); return; } process.nextTick(function() { debug('SERVER: emit close'); self.emit('close'); }); }; Server.prototype.listenFD = util.deprecate(function(fd, type) { return this.listen({ fd: fd }); }, 'listenFD is deprecated. Use listen({fd: }).'); Server.prototype._setupSlave = function(socketList) { this._usingSlaves = true; this._slaves.push(socketList); }; Server.prototype.ref = function() { if (this._handle) this._handle.ref(); }; Server.prototype.unref = function() { if (this._handle) this._handle.unref(); }; // TODO: isIP should be moved to the DNS code. Putting it here now because // this is what the legacy system did. exports.isIP = cares.isIP; exports.isIPv4 = function(input) { return exports.isIP(input) === 4; }; exports.isIPv6 = function(input) { return exports.isIP(input) === 6; }; if (process.platform === 'win32') { var simultaneousAccepts; exports._setSimultaneousAccepts = function(handle) { if (typeof handle === 'undefined') { return; } if (typeof simultaneousAccepts === 'undefined') { simultaneousAccepts = (process.env.NODE_MANY_ACCEPTS && process.env.NODE_MANY_ACCEPTS !== '0'); } if (handle._simultaneousAccepts !== simultaneousAccepts) { handle.setSimultaneousAccepts(simultaneousAccepts); handle._simultaneousAccepts = simultaneousAccepts; } }; } else { exports._setSimultaneousAccepts = function(handle) { }; } // Copyright & License details are available under JXCORE_LICENSE file var NativeModule = require('native_module'); var Script = process.binding('evals').NodeScript; var runInThisContext = Script.runInThisContext; var runInNewContext = Script.runInNewContext; var assert = require('assert').ok; var path = NativeModule.require('path'); var $uw = process.binding('memory_wrap'); var fs = NativeModule.require('fs'); var util = NativeModule.require('util'); // If obj.hasOwnProperty has been overridden, then calling // obj.hasOwnProperty(prop) will break. // See: https://github.com/joyent/node/issues/1707 function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } function Module(id, parent) { this.id = id; this.exports = {}; this.parent = parent; if (parent && parent.children) { parent.children.push(this); } this.filename = null; this.loaded = false; this.children = []; } module.exports = Module; // Set the environ variable NODE_MODULE_CONTEXTS=1 to make node load all // modules in their own context. Module._contextLoad = (+process.env['NODE_MODULE_CONTEXTS'] > 0); Module._cache = {}; Module._pathCache = {}; Module._extensions = {}; var modulePaths = []; Module.globalPaths = []; Module.wrapper = NativeModule.wrapper; Module.wrap = NativeModule.wrap; Module._debug = function() { }; if (process.env.NODE_DEBUG && /module/.test(process.env.NODE_DEBUG)) { Module._debug = console.error; } // We use this alias for the preprocessor that filters it out var debug = Module._debug; // given a module name, and a list of paths to test, returns the first // matching file in the following precedence. // require("a.") // -> a. // require("a") // -> a // -> a. // -> a/index. function statPath(path) { try { return fs.statSync(path); } catch (ex) { } return false; } function isThreadLoadingRoots() { return (!process.subThread && process.threadId == -1) || (process._MTED && process.threadId == 0); } var __existsSync = function(_path) { // checks the file system try { var long = path._makeLong(_path); } catch (e) { console.error('module::__existsSync', e); return false; } try { process.binding('fs').stat(long); return true; } catch (e) { return false; } }; var __mkdirSync = function(dir) { if (__existsSync(dir)) return true; // enabling extension for recursive creation may be necessary var cmd = process.platform === 'win32' ? 'cmd /E:ON /C mkdir ' : 'mkdir -p '; cmd += '"' + dir + '"'; var ret = jxcore.utils.cmdSync(cmd); if (ret.exitCode) { jxcore.utils.console.error('Cannot create directory:', dir); jxcore.utils.console.log(ret.out); try { process.exit(); } catch (e) { } } else { return true; } }; var findJXInPath = function() { var ret = jxcore.utils.cmdSync(process.platform === 'win32' ? 'where jx' : 'which jx'); if (ret.exitCode || !ret.out) return null; var os = NativeModule.require('os'); var arr = ret.out.split(os.EOL); var _path = arr[0]; if (!fs.existsSync(_path)) return null; var ret = jxcore.utils.cmdSync(_path + ' -p "JSON.stringify(process.versions)"'); try { var versions = JSON.parse(ret.out); if (versions.jxcore) return _path; } catch (ex) { } return null; }; // check if the directory is a package.json dir var packageMainCache = {}; function readPackage(requestPath) { if (hasOwnProperty(packageMainCache, requestPath)) { return packageMainCache[requestPath]; } try { var jsonPath = path.resolve(requestPath, 'package.json'); var json = fs.readFileSync(jsonPath, 'utf8'); } catch (e) { return false; } try { var pkg = packageMainCache[requestPath] = JSON.parse(json).main; } catch (e) { e.path = jsonPath; e.message = 'Error parsing ' + jsonPath + ': ' + e.message; throw e; } return pkg; } function tryPackage(requestPath, exts) { var pkg = readPackage(requestPath); if (!pkg) return false; var filename = path.resolve(requestPath, pkg); return tryFile(filename) || tryExtensions(filename, exts) || tryExtensions(path.resolve(filename, 'index'), exts); } // In order to minimize unnecessary lstat() calls, // this cache is a list of known-real paths. // Set to an empty object to reset. Module._realpathCache = {}; // check if the file exists and is not a directory function tryFile(requestPath) { var stats = statPath(requestPath); if (stats && !stats.isDirectory()) { debug('Module.tryFile >', requestPath); return fs.realpathSync(requestPath, Module._realpathCache); } return false; } // given a path checks if the file exists with any of the set extensions function tryExtensions(p, exts) { for (var i = 0, EL = exts.length; i < EL; i++) { var filename = tryFile(p + exts[i]); if (filename) { return filename; } } return false; } Module._findPath = function(request, paths) { var exts = Object.keys(Module._extensions); if (request.charAt(0) === '/') { paths = ['']; } var trailingSlash = (request.slice(-1) === '/'); var cacheKey = JSON.stringify({request: request, paths: paths}); if (Module._pathCache[cacheKey]) { return Module._pathCache[cacheKey]; } // For each path for (var i = 0, PL = paths.length; i < PL; i++) { var basePath = path.resolve(paths[i], request); var filename; if (!trailingSlash) { // try to join the request to the path filename = tryFile(basePath); if (!filename && !trailingSlash) { // try it with each of the extensions filename = tryExtensions(basePath, exts); } } if (!filename) { filename = tryPackage(basePath, exts); } if (!filename) { // try it with each of the extensions at "index" filename = tryExtensions(path.resolve(basePath, 'index'), exts); } if (filename) { Module._pathCache[cacheKey] = filename; return filename; } } return false; }; // 'from' is the __dirname of the module. Module._nodeModulePaths = function(from) { // guarantee that 'from' is absolute. from = path.resolve(from); // note: this approach *only* works when the path is guaranteed // to be absolute. Doing a fully-edge-case-correct path.split // that works on both Windows and Posix is non-trivial. var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\//; var paths = []; var parts = from.split(splitRe); for (var tip = parts.length - 1; tip >= 0; tip--) { // don't search in .../node_modules/node_modules if (parts[tip] === 'node_modules') continue; var dir = parts.slice(0, tip + 1).concat('node_modules').join(path.sep); paths.push(dir); } return paths; }; Module._resolveLookupPaths = function(request, parent) { if (NativeModule.exists(request)) { return [request, []]; } var start = request.substring(0, 2); if (start !== '.' && start !== './' && start !== '..') { var paths = modulePaths; if (parent) { if (!parent.paths) parent.paths = []; if (isWinRT) { // realpathSync works limited. // walk back var rp = path.dirname(parent.filename); if (parent.parent && parent.parent.paths) { for (var i=0;i upln && rp.substr(rp.length-checkln, checkln) != check) { var chck = path.join(rp, 'node_modules'); if (fs.existsSync(chck)) if (parent.paths.indexOf(chck) == -1) parent.paths.unshift(chck); rp = path.join(rp, '../'); } } paths = parent.paths.concat(paths); } return [request, paths]; } // with --eval, parent.id is not set and parent.filename is null if (!parent || !parent.id || !parent.filename) { // make require('./path/to/foo') work - normally the path is taken // from realpath(__filename) but with eval there is no filename var mainPaths = ['.'].concat(modulePaths); mainPaths = Module._nodeModulePaths('.').concat(mainPaths); return [request, mainPaths]; } // Is the parent an index module? // We can assume the parent has a valid extension, // as it already has been accepted as a module. var isIndex = /^index\.\w+?$/.test(path.basename(parent.filename)); var parentIdPath = isIndex ? parent.id : path.dirname(parent.id); var id = path.resolve(parentIdPath, request); // make sure require('./path') and require('path') get distinct ids, even // when called from the toplevel js file if (parentIdPath === '.' && id.indexOf('/') === -1) { id = './' + id; } debug('RELATIVE: requested:', request, 'set ID to:', id, 'from', parent.id); return [id, [path.dirname(parent.filename)]]; }; var native_starters = { '_jx_subs': 'SubThread', '_jx_multiplier': 'MTED', '_jx_monitorHelper': 'Monitoring', '_jx_source': 'Source' }; Module._load = function(request, parent, isMain, content, forced) { if (parent) { debug('Module._load REQUEST', request, 'parent:', parent.id); } var filename; if (!content) { if (native_starters.hasOwnProperty(request) || process.entry_file_name_) filename = request; else { filename = Module._resolveFilename(request, parent); } } else { filename = request; } var cachedModule = Module._cache[filename]; if (cachedModule) { return cachedModule.exports; } var sources = null; if (content) { sources = content; } else if (native_starters.hasOwnProperty(filename)) { debug('starter native module', native_starters[filename]); sources = NativeModule.getSource(filename); } else if (NativeModule.exists(filename)) { // REPL is a special case, because it needs the real require. if (filename == 'repl') { var replModule = new Module('repl'); replModule._compile(NativeModule.getSource('repl'), 'repl.js'); NativeModule._cache.repl = replModule; return replModule.exports; } debug('load native module', request); return NativeModule.require(filename); } var module = new Module(filename, parent); module.fileSource = sources; if (isMain) { process.mainModule = module; module.id = '.'; } Module._cache[filename] = module; var hadException = true; try { module.load(filename, parent, forced); hadException = false; } finally { if (hadException) { delete Module._cache[filename]; } } return module.exports; }; Module.prototype.load = function(filename, parent, force) { debug('load', filename, 'for module', this.id); assert(!this.loaded); this.filename = filename; if (!this.fileSource || (process._EmbeddedSource && filename == 'jx_source.jx')) { this.paths = Module._nodeModulePaths(path.dirname(filename)); var extension = path.extname(filename) || '.js'; if (!Module._extensions[extension]) extension = '.js'; if (process.subThread && parent && (filename == parent.filename || filename == parent.filename.substr(0, parent.filename.length - 5) + 'jx') && filename == process.mainModule.filename) { Module._extensions[extension](this, filename, null); } else { Module._extensions[extension](this, filename, parent); } } else { var checkAgain = process.subThread && (!process.mainModule.filename || process.mainModule.filename === '_jx_subs' || process.mainModule.filename.indexOf('NodeJXThread') !== -1); this.paths = Module._nodeModulePaths(process.cwd()); if (!force) this._compile(stripBOM(this.fileSource), filename, false, false); else this._compile(stripBOM(this.fileSource), filename, true, true); // additional paths resolving for tasks as method() and logic() // possible since process.mainModule.filename is known now due to _compile() if (checkAgain && process.mainModule.filename !== filename) { var arr = Module._nodeModulePaths( path.dirname(process.mainModule.filename)); // iterating from the end, injecting lacking paths to the beginning for (var a = arr.length - 1; a >= 0; a--) { if (this.paths.indexOf(arr[a]) === -1) this.paths.unshift(arr[a]); } } } this.loaded = true; }; Module.prototype.require = function(path, a, b, c, content) { assert(typeof path === 'string', 'path must be a string'); assert(path, 'missing path'); return Module._load(path, this, c, content, b); }; // Resolved path to process.argv[1] will be lazily placed here // (needed for setting breakpoint when called with --debug-brk) var resolvedArgv; // Returns exception if any Module.prototype._compile = function(content, filename, cached, _jxed) { var self = this; var extname = path.extname(filename).toLowerCase(); if (!cached || extname == '.js') { content = content.replace(/^\#\!.*/, ''); } function require(path, a, b, c, content) { return self.require(path, a, b, c, content, false); } require.resolve = function(request) { var fn = Module._resolveFilename(request, self); if (fn) { fn = fn.trim(); if (fn.toLowerCase().indexOf('.js.jx') == fn.length - 6) fn = fn.substr(0, fn.length - 3); } return fn; }; Object.defineProperty(require, 'paths', { get: function() { throw new Error('require.paths is removed. Use ' + 'node_modules folders, or the NODE_PATH ' + 'environment variable instead.'); }}); require.main = process.mainModule; // Enable support to add extra extension types require.extensions = Module._extensions; require.registerExtension = function() { throw new Error('require.registerExtension() removed. Use ' + 'require.extensions instead.'); }; require.cache = Module._cache; var dirname; if (!_jxed && content && content.length) { if (content.charAt(0) == '@') { _jxed = true; } } if (filename == '_jx_subs' || filename == '_monitor_helper' || process.entry_file_name_) { dirname = process.cwd(); } else if (filename == 'jx_source.jx' || filename == '_jx_source') { dirname = path.dirname(process.execPath); } else if (_jxed) { dirname = path.dirname(content.substr(1)); if (dirname && dirname.length) { if (dirname.charAt(0) == '.') { dirname = dirname.substr(1); } filename = filename.replace(dirname, ''); filename = path.join(dirname, filename); } } else { dirname = path.dirname(filename); } if (isWindows) { if (dirname && dirname.length > 2) { if (dirname.charAt(0) == '.' && dirname.charAt(1) == '\\') { dirname = dirname.substr(2); } } } if (Module._contextLoad) { if (self.id !== '.') { debug('load submodule'); // not root module var sandbox = {}; for (var k in global) { if (global.hasOwnProperty(k)) sandbox[k] = global[k]; } sandbox.require = require; sandbox.exports = self.exports; sandbox.__filename = filename; sandbox.__dirname = dirname; sandbox.module = self; sandbox.global = sandbox; sandbox.root = root; return runInNewContext((cached) ? _xo(content) : content, sandbox, filename, true); } debug('load root module'); // root module global.require = require; global.exports = self.exports; global.__filename = filename; global.__dirname = dirname; global.module = self; return runInThisContext((cached) ? _xo(content) : content, filename, true); } var wrapper = Module.wrap((cached) ? _xo(content) : content); var compiledWrapper = runInThisContext(wrapper, filename, true); if (global.v8debug && !process.subThread) { if (!resolvedArgv) { // we enter the repl if we're not given a filename argument. if (process.argv[1]) { if (process._MTED) { resolvedArgv = Module._resolveFilename(process.argv[2], null); } else resolvedArgv = Module._resolveFilename(process.argv[1], null); } else { resolvedArgv = 'repl'; } } // Set breakpoint on module start if (filename === resolvedArgv) { global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0); } } // TODO(obastemur) check ION again and remove the below hack or fix it. // -- I personally suspect ION skips it mostly because of multiple references // to globals? // // experimental hack // ionSpew may skip ION compilation when there is a global member used. // sending the popular references: setTimeout, setInterval, and process var args = [self.exports, require, self, filename, dirname, global.setTimeout, global.setInterval, global.process]; return compiledWrapper.apply(self.exports, args); }; function stripBOM(content) { // Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) // because the buffer-to-string conversion in `fs.readFileSync()` // translates it to FEFF, the UTF-16 BOM. if (content.charCodeAt(0) === 0xFEFF) { content = content.slice(1); } return content; } // Native extension for .js Module._extensions['.js'] = function(module, filename, _) { var content; if (!process.entry_file_name_) { content = fs.readFileSync(filename, 'utf8'); } else { filename = path.basename(filename); if (!$uw.existsSource(filename)) { throw new Error("Entry filename wasn't exist (" + filename + ')'); } content = $uw.readSource(filename, true).toString(); delete process.entry_file_name_; } module._compile(stripBOM(content), filename, undefined, undefined); if (process.entry_file_name_) { process.entry_file_name_ = null; delete process.entry_file_name_; } }; // Native extension for .json Module._extensions['.json'] = function(module, filename) { var content = fs.readFileSync(filename, 'utf8'); try { module.exports = JSON.parse(stripBOM(content)); } catch (err) { err.message = filename + ': ' + err.message; throw err; } }; // Native extension for .node Module._extensions['.node'] = process.dlopen; var isWinRT = process.platform === 'winrt'; var isWindows = process.platform === 'win32' || isWinRT; var isMobile = process.platform === 'ios' || process.platform === 'android'; isMobile = isMobile && process.isEmbedded; Module._initPaths = function() { var homeDir; if (!isWinRT && isWindows) { homeDir = process.env.USERPROFILE; } else if (isWinRT || isMobile) { modulePaths = []; modulePaths[0] = process.userPath; modulePaths[1] = process.cwd(); modulePaths[2] = path.join(process.cwd(), 'jxcore'); if (isWinRT) modulePaths[3] = path.join(process.userPath, 'Assets'); Module.globalPaths = modulePaths.slice(0); return; } else { homeDir = process.env.HOME; } var paths = []; paths[0] = path.resolve(process.execPath, '..', '..', 'lib', 'node'); if (process.env['NODE_PATH']) { var splitter = isWindows ? ';' : ':'; var arr = process.env['NODE_PATH'].split(splitter); var arr_c = []; if (isWindows) { for (var o in arr) { if (!arr.hasOwnProperty(o)) continue; if (arr[o] && arr[o].length > 3) { var ch = arr[o]; if (ch[2] == '\\' && ch[0] == ch[0].toLowerCase()) { arr_c.push(ch[0].toUpperCase() + ch.substr(1, ch.length - 1)); } else { arr_c.push(ch[1].toLowerCase() + ch.substr(1, ch.length - 1)); } } } arr = arr.concat(arr_c); } paths = arr.concat(paths); } if (homeDir) { paths.unshift(path.resolve(homeDir, '.node_libraries')); paths.unshift(path.resolve(homeDir, '.node_modules')); paths.unshift(path.resolve(homeDir, 'jxmodules')); } modulePaths = paths; // clone as a read-only copy, for introspection. Module.globalPaths = modulePaths.slice(0); }; Module.addGlobalPath = function(path) { if (path && path.length) { modulePaths.unshift(path); } Module.globalPaths = modulePaths.slice(0); }; Module.removeGlobalPath = function(path) { if (path && path.length) { var arr = []; for (var i in modulePaths) { if (modulePaths.hasOwnProperty(i) && modulePaths[i] != path) { arr.push(modulePaths[i]); } } modulePaths = arr.slice(0); Module.globalPaths = modulePaths.slice(0); } }; // bootstrap repl Module.requireRepl = function() { return Module._load('repl', '.'); }; Module._initPaths(); // backwards compatibility Module.Module = Module; var _dirname = function(o) { if (o && o.trim && o.length) { var p = o.trim(); if (p[p.length - 1] == path.sep) { return p.substr(0, p.length - 1); } } return null; }; Module.nameFix = function(a) { var repFrom = isWindows ? /[\/]/g : /[\\]/g; var repTo = isWindows ? '\\' : '/'; return a.replace(repFrom, repTo); }; Module._oldRes = function(request, parent) { var resolvedModule = Module._resolveLookupPaths(request, parent); var id = resolvedModule[0]; var paths = resolvedModule[1]; // look up the filename first, since that's the cache key. debug('looking for', id, 'in', paths); var filename = Module._findPath(request, paths); // additional paths resolving for define() // logic() and method() were resolved properly in _nodeModulePaths() if (!filename && (process.subThread || process.isPackaged) && parent && parent.parent && parent.parent.filename) { var p = Module._nodeModulePaths(parent.parent.filename); filename = Module._findPath(request, p); } if (!filename) { var err = new Error("Cannot find module '" + request + "'"); err.code = 'MODULE_NOT_FOUND'; throw err; } return filename; }; Module._resolveFilename = Module._oldRes; var _xo = function(c) { return c; }; var getMemContent = function(content) { return content; }; // bootstrap main module. Module.runMain = function() { // Load the main module--the command line argument. Module._load(process.argv[1], null, true); // Handle any nextTicks added in the first tick of the program process._tickCallback(); }; /** JXCORE_JXP* */ var jxt = process.binding('jxutils_wrap'); /** * Allows to override the path for node-gyp.js * if process.env.JX_NODE_GYP_OVERRIDE is present. * This is used by npmjx. */ var nodeGypOverride = function(_path, sid) { if (process.env.JX_NODE_GYP_OVERRIDE) { var newPath = process.env.JX_NODE_GYP_OVERRIDE; if (path.resolve(_path) === path.resolve(newPath)) return false; var bn = path.basename(_path.toLowerCase()); if (bn === 'node-gyp' || bn === 'node-gyp.js' && fs.existsSync(newPath)) { if (process.env.JX_NODE_GYP_OVERRIDE_VERBOSE) { jxcore.utils.console.info('Overriding node-gyp.js at %s:\n old: %s\n new:%s', sid, path.resolve(_path), newPath); } return newPath; } } return false; }; Module.runMain = function() { if (process.subThread) { var isJXPackaged = null; if (!process.isPackaged && !process.isEmbedded) { var jxmain = process.argv[process._MTED ? 2 : 1]; if (jxmain) jxmain = jxmain.trim(); isJXPackaged = jxmain && jxmain.length > 3 && jxmain.slice(-3).toLowerCase() === '.jx'; } if (process.isPackaged || isJXPackaged) _loadSub(true); Module._load('_jx_subs', null, true); } else if (process._Monitor) { Module._load('_jx_monitorHelper', null, true); } else if (process._MTED) Module._load('_jx_multiplier', null, true); else if (process._EmbeddedSource) { Module._load('_jx_source', null, true); } else { var ngo = nodeGypOverride(process.argv[1], 'runMain'); if (ngo) process.argv[1] = ngo; Module._load(process.argv[1], null, true); } // Handle any nextTicks added in the first tick of the program process._tickCallback(); }; var _loadSub = function(dontWait) { if (process.threadId == -1) return; if (!dontWait && !isThreadLoadingRoots()) { // since process.reloadModules is called only once per thread, // we should wait a little for NativeModule.Roots var _start = Date.now(); while (!$uw.existsSource('NativeModule.Roots')) { sleep(2); var dx = Date.now() - _start; // practically we should wait as long as it takes... // however let's set up a limit 5 secs (for larger packages) if (dx > 5000) { jxcore.utils.console.warn('Thread no', process.threadId, ' will be reloading JX package into memory.\nYou might create this instance after the JX package is loaded.'); break; } } } if ($uw.existsSource('NativeModule.Roots')) { NativeModule.RootsLength = 1; NativeModule.Roots = JSON.parse($uw.readSource('NativeModule.Roots')); for (var o in NativeModule.Roots) { if (!NativeModule.Roots.hasOwnProperty(o)) continue; var bns = NativeModule.Roots[o]; for (var b in bns) { if (bns.hasOwnProperty(b) && bns[b] && bns[b].size) { bns[b] = new fs.JXStats(null, null, bns[b]); } } } } }; getMemContent = function(location) { var data = $uw.readSource(location, true); var str = data.toString(); data = null; return str; }; _xo = function(_content) { var ex = $uw.readSource(_content, true); var _e = ex ? ex.toString() : ''; ex = null; return wrapJS(_content, _e); }; // Native extension for .jsonx Module._extensions['.jsonx'] = function(module, filename) { if ($uw.existsSource('@' + filename)) { try { module.exports = JSON.parse(stripBOM(getMemContent('@' + filename))); } catch (err) { err.message = filename + ': ' + err.message; throw err; } } else Module._extensions['.json'](module, filename); }; Module.setSourced = function(location, source, obj, verbose, preserve_chmod) { location = path.normalize(location); var getDirName = function(_loc) { var dn = _dirname(_loc); if (!dn) dn = path.dirname(_loc); return dn; }; var toBeCreated = []; var color = jxcore.utils.console.setColor; var dir = getDirName(location); var _loc = location; if (process.platform === 'win32') preserve_chmod = false; // get ordered folder names to be created while (true) { var _dir = getDirName(_loc); if (__existsSync(_dir) || _dir === '.') break; toBeCreated.unshift(_dir); _loc = _dir; } if (toBeCreated.length) { for(var i = 0, len = toBeCreated.length; i < len; i++) { var _dir = toBeCreated[i]; var msg = color('creating directory ', 'yellow') + _dir; var _loc = './' + _dir; var mode = null; if (preserve_chmod && obj.dirStats && obj.dirStats[_loc]) { // obj.dirStats[_loc] can be either number or entire stat object if (typeof obj.dirStats[_loc] === 'object' && typeof obj.dirStats[_loc].mode === 'number') mode = obj.dirStats[_loc].mode; else if (typeof obj.dirStats[_loc] === 'number') mode = obj.dirStats[_loc]; } try { fs.mkdirSync(_dir); // mode needs to be set separately (not through options of mkdirSync) if (mode) { msg += color(' chmod ', 'yellow') + (mode & parseInt('777', 8)).toString(8); fs.chmodSync(_dir, mode); } } catch (ex) { msg += color(' Error: ', 'red') + ex; console.error(msg); process.exit(1); } if (verbose) console.log(msg); } } if (fs.existsSync(dir)) { var msg = color('extracting ', 'yellow') + location; var _loc = './' + location; var mode = null; if (preserve_chmod && obj.stats && obj.stats[_loc]) { var fileStats = JSON.parse(obj.stats[_loc]); if (fileStats.mode) mode = fileStats.mode; } try { fs.writeFileSync(location, source); // mode needs to be set separately (not through options of writeFileSync) if (mode) { msg += color(' chmod ', 'yellow') + (mode & parseInt('777', 8)).toString(8); fs.chmodSync(location, mode); } } catch (ex) { msg += color(' Error: ', 'red') + ex; console.error(msg); process.exit(1); } if (verbose) console.log(msg); } }; var getRelative = function(parent, child) { var pdir = _dirname(parent); if (!pdir) pdir = path.dirname(parent); var cname = path.basename(child); var chilen = child.length; if (chilen > 0 && child.charAt(chilen - 1) == path.sep) { cname = ''; } var cdir = _dirname(child); if (!cdir) cdir = path.dirname(child); if (pdir.indexOf('.' + path.sep) == 0) { if (pdir.length > 2) pdir = pdir.substr(2); else pdir = ''; } if (cdir.indexOf('.' + path.sep) == 0) { if (cdir.length > 2) cdir = cdir.substr(2); else cdir = ''; } var pdirs = pdir.split(path.sep); var cdirs = cdir.split(path.sep); var plen = pdirs.length - 1; var clen = cdirs.length; var n = 0; for (var i = 0; i < clen; i++) { if (cdirs[i]) { if (cdirs[i] == '..') { plen--; n++; } else if (plen >= i && cdirs[i] === pdirs[i]) { n++; } else { break; } } else { n++; } } var str = ''; for (var i = 0; i <= plen; i++) { if (pdirs[i] == '.') { continue; } str += pdirs[i]; if (str.length && str[str.length - 1] != path.sep) str += path.sep; } for (var i = n; i < clen; i++) { if (cdirs[i] == '.') { continue; } str += cdirs[i]; if (str.length && str[str.length - 1] != path.sep) str += path.sep; } if (str.charAt(0) != path.sep && !isWindows) { str = path.sep + str; } if (cname.length == 0 && str.charAt(str.length - 1) == path.sep) { str = str.substr(0, str.length - 1); } if (str.length && str[str.length - 1] == path.sep && cname.length && cname[0] == path.sep) { cname = cname.substr(1); } var result = (str + cname); if (result.length > 3) { // ends with /.. if (result[result.length - 3] == path.sep && result[result.length - 2] == '.' && result[result.length - 1] == '.') { var ind = result.lastIndexOf(path.sep, result.length - 4); if (ind > 0) { result = result.substr(0, ind); } else { result = '..' + path.sep; } } } return result; }; var runActions = function(actions, argName, native, verbose) { if (!actions) return true; if (!util.isArray(actions)) actions = [actions]; var jx = process.execPath; if (native) jx = findJXInPath(); var quotedArg = '`' + argName + '`'; if (verbose) jxcore.utils.console.log('Executing', quotedArg, 'steps:', 'cyan'); var err = false; for (var o = 0, len = actions.length; o < len; o++) { var cmd = actions[o].trim(); var quotedCmd = '`' + cmd + '`'; if (verbose) jxcore.utils.console.write((o + 1) + '.', '\t', cmd, '...'); if (cmd.indexOf('JX_BINARY') !== -1) { if (!jx) { var str = 'JX_BINARY cannot be resolved because JXcore was not found ' + 'in the PATH.'; if (verbose) jxcore.utils.console.error(' Error:\n' + str); else // if not verbose, show error anyway jxcore.utils.console.error( 'Cannot execute', quotedArg, 'step', quotedCmd, ':\n' + str); err = true; continue; } else cmd = cmd.replace('JX_BINARY', jx); } var ret = jxcore.utils.cmdSync(cmd); if (ret.exitCode) { var str = ret.out.trim(); if (str) str += '. '; str += 'Exit code: ' + ret.exitCode + '.'; if (verbose) jxcore.utils.console.error(' Error:\n' + str); else // if not verbose, show error anyway jxcore.utils.console.error( 'Error while executing', quotedArg, 'step', quotedCmd, ':\n' + str); err = true; } if (!err && verbose) { jxcore.utils.console.log(' OK', 'green'); if (ret.out && ret.out.trim()) jxcore.utils.console.log(ret.out.trim()); } } return err; }; var __cwd; var readX = function(m, f, obj, pa, eo) { var pn = obj.project.name + '@' + obj.project.version; var xpName = '~~' + pn.trim(); while (xpName.indexOf(' ') >= 0) { xpName = xpName.replace(' ', ''); } $uw.setSource('~~xpName', xpName); NativeModule.RootsLength = 1; var entry_file = pa == undefined || pa == null; var pass = false; var executed = false; obj.project.files = true; if (!obj.project.native && !obj.project.library && !entry_file && process.argv[1] !== 'monitor' && process.argv[2] !== 'run') { throw f + ' can not be embedded into another project. ' + "It's marked as an executable."; } if (process._EmbeddedSource || entry_file) { if (!__cwd) __cwd = path.dirname(process.execPath) + path.sep; if (process._EmbeddedSource) f = __cwd + f; } if (obj.project.preInstall) { if (!fs.existsSync(obj.project.name + '.installed')) { runActions(obj.project.preInstall, 'preInstall', obj.project.native); fs.writeFileSync(obj.project.name + '.installed', 'REMOVE THIS FILE TO RE-PLAY the preInstall Steps'); } } var jx_package = require('_jx_package'); var extract_options = jx_package.normalizeExtractOptions(eo, obj.project.native); var extract_what = null; var partialExtract = false; if (eo) { if (util.isArray(eo['what'])) { partialExtract = true; extract_what = jx_package.getPatchMatcher(eo['what']); } } var extract_verbose = eo ? jxcore.utils.argv.isBoolValue(eo['verbose']).isTrue : false; var extract_overwrite = eo ? jxcore.utils.argv.isBoolValue(eo['overwrite']).isTrue : false; var extract_where = eo ? eo['where'] : null; // default sub folder for extraction var subDir = obj.project.name; if (extract_where === './') subDir = ''; else if (extract_where) subDir = extract_where; if (!entry_file) { // do not turn off for native packages //eo = false; } else if (obj.project.execute) { obj.project.execute = Module.nameFix(obj.project.execute); executed = true; obj.project.startup = obj.project.execute; } if (!$uw.existsSource(xpName)) { $uw.setSource(xpName, JSON.stringify(obj.project)); } obj.project.name = Module.nameFix(obj.project.name); var org_location; if (eo && subDir) { if (fs.existsSync(subDir)) { var stat = fs.statSync(subDir); if (stat.isFile()) { jxcore.utils.console.warn( "Cannot extract the package to directory '%s'. " + 'There is already a file with that name.', subDir); process.exit(); } else if (stat.isDirectory() && !extract_overwrite) { jxcore.utils.console.warn( "Cannot extract the package to directory '%s'. " + 'There is already a folder with that name.\n' + 'Use `--extract-overwrite` switch for `jx package` command.', subDir); process.exit(); } pass = true; } else { if (!__mkdirSync(subDir)) return; org_location = process.cwd(); process.chdir(subDir); } } if (!pass) { process.extracting = true; if (eo['pre-actions']) runActions(eo['pre-actions'], 'extract-pre-actions', obj.project.native, extract_verbose); if (eo['message'] && eo['message'].length) { // if extract-message is an array, benefit from formatting feature, etc. if (util.isArray(eo['message'])) jxcore.utils.console.log.apply(null, eo['message']); else jxcore.utils.console.log(eo['message']); } for (var o in obj.docs) { if (!obj.docs.hasOwnProperty(o)) continue; var a = Module.nameFix(o); var doExtract = eo && (!partialExtract || (partialExtract && extract_what && extract_what.test && extract_what.test(a))); var isStartup = getRelative(f, a) === getRelative(f, obj.project.startup); var doEmbed = !doExtract; if (obj.project.native || partialExtract) { // for native packages (and non-native partial extracts) // we should leave the startup file embedded to be able to run it if (isStartup) doEmbed = true; } if (doEmbed) { var a_embed = a; if (a_embed.length > 3) { if (a_embed.substr(a_embed.length - 3) != '.jx') { a_embed += '.jx'; } } a_embed = getRelative(f, a_embed); } var __ext = path.extname(o); var isJS = __ext === '.js'; var buff = null; var legacyPackaging = !obj.binary_packaging; if (legacyPackaging) { buff = new Buffer(obj.docs[o], 'base64'); buff = jxt._ucmp(buff); // right now buff is still base64 encoded // we had so much base64 encoding before... if (!isJS) buff = new Buffer(buff.toString(), 'base64'); } else { var _start = obj.docs[o].start; var _len = obj.docs[o].len; buff = jxt._ucmp(obj.binary_packaging.buffer.slice(_start, _start + _len)); } // buff is uncompressed at this point if (!buff) { jxcore.utils.console.error('Error while decompressing:', o); continue; } if (o === "./package.json") obj.package_json = buff.toString(); if (o === './' + obj.project.readme_file) obj.readme = buff.toString(); if (o === './' + obj.project.license_file) obj.license = buff.toString(); if (__ext == '.js') { if (doEmbed) { if (!obj.project.fs_reach_sources) { $uw.setSource('X@' + a_embed, '1'); } else { if (obj.project.fs_reach_sources !== true && !obj.project.fs_reach_sources[o]) { $uw.setSource('X@' + a_embed, '1'); } } } } if (doExtract) { var write = true; // check overwrite only if extracting to app root folder. // For other folders check was already performed above. if (!subDir && !extract_overwrite && __existsSync(a)) write = false; if (write) { Module.setSourced(a, buff, obj, extract_verbose, extract_options.chmod); } else { if (extract_verbose) jxcore.utils.console.log(jxcore.utils.console.setColor( 'skipping (file already exists)', 'yellow'), path.normalize(a)); } } if (doEmbed) { $uw.setSource('@' + a_embed, buff); var dn = path.dirname(a_embed); var bn = path.basename(a_embed); if (bn.substr(bn.length - 2) == 'jx') bn = bn.substr(0, bn.length - 3); if (!NativeModule.Roots[dn]) { NativeModule.Roots[dn] = {}; } var _fstat = new fs.Stats(), _fnew; if (obj.stats) _fnew = new fs.JXStats(null, null, JSON.parse(obj.stats[o])); else _fnew = new fs.JXStats(buff.length, 33188); for (var o in _fnew) { if (!_fnew.hasOwnProperty(o)) continue; _fstat[o] = _fnew[o]; } NativeModule.Roots[dn][bn] = _fstat; } buff = null; } delete obj.docs; delete obj.binary_packaging; jxcore.tasks.forceGC(); // one-time adding folders not containing any files, // but containing sub-folders var _fstat1 = fs.statSync(process.cwd()); // real fs dir var _cwd = path.normalize(process.cwd()); var addDir = function(o) { if (path.normalize(o) === _cwd || o.length < _cwd.length) return; var _dirname = path.dirname(o); var _basename = path.basename(o); if (NativeModule.Roots[_dirname] && NativeModule.Roots[_dirname][_basename]) return; if (__existsSync(o)) return; if (!NativeModule.Roots[_dirname]) NativeModule.Roots[_dirname] = {}; NativeModule.Roots[_dirname][_basename] = new fs.JXStats(null, null, _fstat1); // go down until the process.cwd() addDir(_dirname); }; for (var o in NativeModule.Roots) { if (NativeModule.Roots.hasOwnProperty(o)) addDir(o); } delete process.extracting; if (eo['post-actions']) runActions(eo['post-actions'], 'extract-post-actions', obj.project.native, extract_verbose); } if (isThreadLoadingRoots()) { $uw.setSource('NativeModule.Roots', JSON.stringify(NativeModule.Roots)); } if (entry_file) { var exito = false; if (process.argv[2] == 'readme') { jxcore.utils.console.warn(obj.readme || "JX file doesn't have a readme definition.\n"); exito = true; } else if (process.argv[2] == 'license') { jxcore.utils.console.warn(obj.license || "JX file doesn't have a license definition.\n" + "This might be a bug or the package doesn't have a license file." + '\nIf this is a bug, please let us know from support@jxcore.com\n'); exito = true; } if (exito) { var ww = obj.project.website; if (!ww) { if (obj.package_json) obj.packo = JSON.parse(obj.package_json); if (obj.packo) { if (obj.packo.homepage) { ww = obj.packo.homepage; } else if (obj.packo.repository) { ww = obj.packo.repository.url; } } } if (ww) { // partial solution to have this printed on windows when piped // (e.g. executed through child_process) var _log = isWindows ? jxcore.utils.console.warn : jxcore.utils.console.info; _log('You may want to visit (' + ww + ') for more information about the package.'); } try { process.exit(); } catch (e) { } return false; } if (eo && !partialExtract) { if (process.argv[2] != 'readme' && process.argv[2] != 'license') { if (obj.project.execute || obj.project.startup) { var so = obj.project.execute || obj.project.startup; so = so.replace('.' + path.sep, ''); so = so.replace('./', ''); // for windows var floc = path.join(subDir, so); var cwd = process.cwd(); if (!pass && org_location) cwd = org_location; jxcore.utils.console.log('executing', floc, 'yellow'); var argz = [floc].concat(process.argv.slice(2)); var _code = 0; require('child_process').spawn(process.execPath, argz, { stdio: 'inherit', cwd: cwd }).on('close', function(code) { _code = code; jxcore.utils.continue(); }); // hang this process. needs jump() instead of pause() // (to be able to return back from closed child) jxcore.utils.jump(); // exit with same exit code as child process.exit(_code); return false; } } try { process.exit(); } catch (e) { } return false; } } var q = obj.project.startup; if (q.length > 3) { var m_ext = q.substr(q.length - 3), found = false; if (m_ext[0] != '.') { q += path.sep + 'index.js.jx'; q = Module.nameFix(q); q = getRelative(f, q); if (!$uw.existsSource('@' + q)) { q = obj.project.startup; } else { found = true; } } if (!found) { if (m_ext != '.jx') { if (m_ext != '.js') { q += '.js'; } q += '.jx'; } q = Module.nameFix(q); q = getRelative(f, q); } } else { q = Module.nameFix(q); q = getRelative(f, q); } if (executed) { if (!$uw.existsSource('@' + q)) { console.log("File doesn't exist", q); try { process.exit(); } catch (e) { } return false; } } var was_embedded = process._EmbeddedSource; if (process._EmbeddedSource) { var mfile = path.join(__cwd, obj.project.startup); if (path.extname(mfile) == '.js') { mfile += '.jx'; } process.mainModule.filename = mfile; $uw.setSource('_EmbeddedSource.mainModule.filename', mfile); NativeModule.require('_jx_config'); process.argv[0] = process.execPath; delete(process.mainModule.fileSource); delete(process._EmbeddedSource); } jxcore.tasks.forceGC(); m._filename = q; $uw.setSourceIfNotExists('??' + f, '1'); obj.project.startup = getRelative(f, obj.project.startup); obj.project.startup = Module._resolveFilename(obj.project.startup, m); if (!was_embedded && entry_file) { $uw.setSource('_EmbeddedSource.mainModule.filename', obj.project.startup); process.mainModule.filename = obj.project.startup; } Module._cache[obj.project.startup] = new Module(obj.project.startup, m); m._compile('@' + q, obj.project.startup, true, true, false); obj = null; jxt._ucmp(null); return true; }; var getMainFile = function(fold) { var zt = fold; var ret = 'index.js'; if (NativeModule.Roots[zt]) { if (NativeModule.Roots[zt]['package.json']) { zt += path.sep + 'package.json.jx'; var source = getMemContent('@' + zt); var js = JSON.parse(source); if (js.main) { ret = js.main.replace('.' + path.sep, ''); ret = Module.nameFix(ret); if (isWindows) { if (ret.length > 2) { if (ret.charAt(0) == '.' && ret.charAt(1) == path.sep) { ret = ret.substr(2); } } } var _extname = path.extname(ret); if (!_extname) { fold += path.sep + ret; if (NativeModule.Roots[fold]) { if (NativeModule.Roots[fold]['index.js.jx'] || NativeModule.Roots[fold]['index.js']) { return ret + path.sep + 'index.js'; } } var drname = path.dirname(fold); var bsname = path.basename(fold); if (NativeModule.Roots[drname][bsname + '.js.jx']) { ret += '.js'; } else if (!NativeModule.Roots[fold + path.sep + ret]) { ret += '.js'; } else ret += path.sep + 'index.js'; } } } else { var bsname = path.basename(fold); if (NativeModule.Roots[fold]['index.js.jx']) return fold + 'index.js.jx'; if (NativeModule.Roots[fold][bsname + '.js.jx']) return fold + bsname + 'js.jx'; } } return ret; }; var getCheckedName = function(a, org) { if (org && (a === org || a + '.js.jx' === org)) return 0; if ($uw.existsSource('@' + a)) { return a; } if ($uw.existsSource('@' + a + '.jx')) { return a + '.jx'; } if ($uw.existsSource('@' + a + '.js.jx')) { return a + '.js.jx'; } if ($uw.existsSource('@' + a + '.json.jx')) { return a + '.json.jx'; } return null; }; var fixByFolder = function(a) { if (NativeModule.Roots[a]) { var mfile = getMainFile(a); if (NativeModule.Roots[a][mfile]) { a += path.sep + mfile; } else { var newpath = a + path.sep + mfile; var ndir = path.dirname(newpath); var nbase = path.basename(newpath); var found = false; if (NativeModule.Roots[ndir]) { if (NativeModule.Roots[ndir][nbase]) { a += path.sep + getMainFile(a); found = true; } } if (!found) { newpath = a + path.sep + (mfile.replace(path.extname(mfile), '')); if (NativeModule.Roots[newpath]) { return fixByFolder(newpath); } } } } return a; }; Module._resolveFilename = function(r, p, ___, ____, __subCheck) { var ngo = nodeGypOverride(r, '_resolveFilename'); if (ngo) return ngo; if (NativeModule.exists(r)) { return r; } if (!NativeModule.RootsLength) return Module._oldRes(r, p); if (!r) { throw ('Fatal: no parameter given to require.'); } var host_name = p ? p.id : null; var found_target = null; var a = getCheckedName(r, host_name); if (a === 0) found_target = r; // do not use this yet. search for modules if (a) { return a; } a = Module.nameFix(r).trim(); var subCheck = null; var ntarget = (p ? (p.id || p.filename) : null); if (ntarget && a[a.length - 1] == path.sep) { a = path.join(path.dirname(ntarget), a); if (a[a.length - 1] == path.sep) a = a.substr(0, a.length - 1); a = fixByFolder(a); } if (!__subCheck) { if (a.length && a[a.length - 1] == path.sep) { subCheck = a.substr(0, a.length - 1); a = subCheck; subCheck += path.sep + getMainFile(subCheck); } if (a == '.') { a = Module.nameFix('./index.js'); } } else { a = __subCheck; } var qq = a, paths = []; var ex = null; var mod_loc = null; if (p && (p.id || p.filename)) { paths = p.paths; if (p.parent) { var q = p.parent; while (true) { var fn = q.id ? q.id : q.filename; if (fn.indexOf('.js.jx') > 0 || fn.indexOf('.json.jx') > 0) { if (q.parent) { q = q.parent; } else { break; } } else if (fn.indexOf('.jx') > 0) { break; } else { break; } } paths = q.paths; } var z = p._filename; if (!z) z = p.filename; if (z) { ex = path.extname(z); } if (ex == '.jx') { var sub = path.dirname(z); if (NativeModule.Roots[sub + path.sep + 'node_modules' + path.sep + a]) { mod_loc = sub + path.sep + 'node_modules' + path.sep + a; } a = getRelative(sub + path.sep, a); if (a.length > 2 && a[0] == path.sep && a[1] == path.sep) a = a.substr(1); } else { sub = p.id; a = getRelative(sub, a); } } var ext = path.extname(a); if (ext == '.jx') { var q = a.lastIndexOf(path.sep); a = '.' + path.sep + a.substr(q + 1); } var isModuleName = r.indexOf('/') === -1 && r.indexOf('\\') === -1; var res1 = getCheckedName(a, host_name); if (!found_target && res1 === 0) found_target = a; // do not use this yet. search for modules // if both name.js and "name" module exist - allow the module first if (res1 && !isModuleName) { return res1; } var plast = a.lastIndexOf(path.sep); if (plast > 0 && ext == '' && !NativeModule.Roots[a] && plast + 1 < a.length) { var anext = a.substr(0, plast); var apre = a.substr(plast + 1); var nname = anext + path.sep + 'node_modules' + path.sep + apre; if (NativeModule.Roots[nname]) { a = nname; } } a = fixByFolder(a); var res = getCheckedName(a, host_name); if (!found_target && res === 0) found_target = a; // do not use this yet. search for modules if (res && !isModuleName) { return res; } // if not found in node_modules, but found the file before - use it if (res1 && !isModuleName) { return res1; } if (mod_loc) { a = fixByFolder(mod_loc); res = getCheckedName(a, host_name); if (!found_target && res === 0) found_target = a; // do not use this yet. search for modules if (res && !isModuleName) { return res; } } if (ext == '.jx' || ex == '.jx') { var predir = path.dirname(a); var loc = 1; paths = paths.concat(modulePaths); for (var ki = 0; ki < 10; ki++) { loc = predir.lastIndexOf(path.sep); if (loc > 0) { predir = predir.substr(0, loc); if (predir.charAt(0) == '.' && predir.charAt(1) == path.sep) { predir = predir.substr(2); } paths.push(predir); } else { break; } } var checkeds = {}; var zq = path.join('node_modules', qq); for (var o in paths) { if (!paths.hasOwnProperty(o)) continue; var pp = paths[o]; res = checkin(pp, zq, checkeds); if (res) return res; } for (var o in paths) { if (!paths.hasOwnProperty(o)) continue; var pp = paths[o]; res = checkin(pp, qq, checkeds); if (!found_target && res === 0) found_target = a; // do not use this yet. search for modules if (res) { if (!isModuleName) return res; else break; } } checkeds = null; } if (subCheck) { return Module._resolveFilename(r, p, null, null, subCheck); } // there still can be node_modules/some_module present in filesystem if (found_target) { try { return Module._oldRes(r, p); } catch (ex) { return getCheckedName(found_target); } } return Module._oldRes(r, p); }; var checkin = function(pp, zq, checkeds) { if (pp && pp.length) { if (pp[0] == '.') { pp = pp.substr(1); } var io = pp.length - 12; if (io > 0 && pp.indexOf('node_modules') == io) { pp = pp.substr(0, io); } } else { return null; } if (checkeds[pp + zq]) return null; checkeds[pp + zq] = 1; var xx = getRelative(pp + path.sep, zq); var ires = null; if (NativeModule.Roots.hasOwnProperty(xx)) { ires = getCheckedName(xx + path.sep + getMainFile(xx)); } if (!ires) ires = getCheckedName(xx); if (ires) { return ires; } xx = xx + path.sep + getMainFile(xx); ires = getCheckedName(xx); if (ires) { return ires; } return null; }; var sleep = function(timeout) { setTimeout(function() { jxcore.utils.continue(); }, timeout); jxcore.utils.pause(); }; Module._extensions['.jx'] = function(m, f, pa) { if (f.indexOf('.json.jx') > 0) { Module._extensions['.jsonx'](m, f); return; } _loadSub(); if ($uw.existsSource('@' + f)) { m._compile('@' + f, f, true, true); return; } var sets = $uw.setSourceIfNotExists('?' + f, '1'); // threadId could be bigger than 0 but still it may not // be a subthread. (embedded multithreading) if (process.threadId > 0 && process.subThread) { var skip = false; if (!sets) { var counter = 0; var h = f.substr(0, f.length - 3) + '.js.jx'; // this is very ugly but we give some time to main thread // to read from the file system so we wouldn't do the same // for sub threads. max 2sec while (!$uw.existsSource('??' + f)) { sleep(2); if (counter++ > 1000) { skip = true; break; } } if (!skip) { if ($uw.existsSource('@' + h)) { if (!pa) { process.mainModule.filename = h; } m._compile('@' + h, h, true, true); return; } } } } var buffer, obj; if (!m.fileSource) { buffer = fs.readFileSync(f); } else { buffer = m.fileSource; } var jx_package = require('_jx_package'); var firstNumber = jx_package.bufferToNumber(buffer, buffer.length - 8); var secondNumber = jx_package.bufferToNumber(buffer, buffer.length - 4); var legacyPackaging = secondNumber !== firstNumber + 12345; if (legacyPackaging) { obj = JSON.parse(jxt._ucmp(buffer, 1)); if (!process.noDeprecation) { jxcore.utils.console.warn('Your package was created with older JXcore packaging format ' + 'which is currently depreciated and its support will be removed in future JXcore releases.') jxcore.utils.console.log('Don\`t worry, for the moment the package can still be executed.'); jxcore.utils.console.log('However we recommend recreating a package ' + 'using the latest JXcore version (also for better performance).'); } } else { var _size = firstNumber; // the `obj` is just a part of a buffer obj = JSON.parse(jxt._ucmp(buffer.slice(0, _size), 1)); if (!obj.binary_packaging) obj.binary_packaging = {}; obj.binary_packaging.buffer = buffer.slice(_size); } buffer = null; if (!obj.project) { var err = new Error('Package is either corrupted or not ' + 'compatible with this JX binary. (' + f + ')'); throw err; } jxcore.tasks.forceGC(); return readX(m, f, obj, pa, obj.project.extract); }; var wrapJS = function(fname, fileSource) { var xpName = $uw.readSource('~~xpName'); if (!xpName) throw "Variable xpName is not defined."; fname = fname.replace(process.cwd(), ''); var keepb = '/*ouvz&tJXPoaQnod*/\n'; if (fname.indexOf('node_modules') < 0) keepb += "exports.__defineGetter__('$JXP',function(){var " + "js = JSON.parse(process.binding('memory_wrap').readSource('" + xpName + "')); js.bind=function(){}; return js;});\n"; var keep = '\n/*mouvz&tJXPoaQnodeJX&vz*/'; // also remove shebang return keepb + fileSource.replace(/^\#\!.*/, '') + keep; };// Copyright & License details are available under JXCORE_LICENSE file var tls = require('tls'); var http = require('http'); var util = require('util'); var url = require('url'); var inherits = require('util').inherits; function Server(opts, requestListener) { if (!(this instanceof Server)) return new Server(opts, requestListener); if (process.features.tls_npn && !opts.NPNProtocols) { opts.NPNProtocols = ['http/1.1', 'http/1.0']; } tls.Server.call(this, opts, http._connectionListener); this.httpAllowHalfOpen = false; if (requestListener) { this.addListener('request', requestListener); } this.addListener('clientError', function(err, conn) { conn.destroy(err); }); } inherits(Server, tls.Server); exports.Server = Server; exports.createServer = function(opts, requestListener) { return new Server(opts, requestListener); }; // HTTPS agents. function createConnection(port, host, options) { if (typeof port === 'object') { options = port; } else if (typeof host === 'object') { options = host; } else if (typeof options === 'object') { options = options; } else { options = {}; } if (typeof port === 'number') { options.port = port; } if (typeof host === 'string') { options.host = host; } return tls.connect(options); } function Agent(options) { http.Agent.call(this, options); this.createConnection = createConnection; } inherits(Agent, http.Agent); Agent.prototype.defaultPort = 443; var globalAgent = new Agent(); exports.globalAgent = globalAgent; exports.Agent = Agent; exports.request = function(options, cb) { if (typeof options === 'string') { options = url.parse(options); } if (options.protocol && options.protocol !== 'https:') { throw new Error('Protocol:' + options.protocol + ' not supported.'); } options = util._extend({ createConnection: createConnection, defaultPort: 443 }, options); if (typeof options.agent === 'undefined') { if (typeof options.ca === 'undefined' && typeof options.cert === 'undefined' && typeof options.ciphers === 'undefined' && typeof options.key === 'undefined' && typeof options.passphrase === 'undefined' && typeof options.pfx === 'undefined' && typeof options.rejectUnauthorized === 'undefined') { options.agent = globalAgent; } else { options.agent = new Agent(options); } } return new http.ClientRequest(options, cb); }; exports.get = function(options, cb) { var req = exports.request(options, cb); req.end(); return req; }; // Copyright & License details are available under JXCORE_LICENSE file var util = require('util'); var net = require('net'); var Stream = require('stream'); var url = require('url'); var EventEmitter = require('events').EventEmitter; var FreeList = require('freelist').FreeList; var HTTPParser = process.binding('http_parser').HTTPParser; var assert = require('assert').ok; var uw = process.binding('jxutils_wrap'); var _jx_helper = require('_jx_http_helper'); var pin = _jx_helper.pinIt; var debug; if (process.env.NODE_DEBUG && /http/.test(process.env.NODE_DEBUG)) { debug = function(x) { console.error('HTTP: %s', x); }; } else { debug = function() { }; } function readStart(socket) { if (!socket || !socket._handle || !socket._handle.readStart || socket._paused) return; socket._handle.readStart(); } function readStop(socket) { if (!socket || !socket._handle || !socket._handle.readStop) return; socket._handle.readStop(); } exports.IncomingMessage = require('_jx_incoming').IncomingMessage; var parsers = require('_jx_parsers').parsers; exports.parsers = parsers; var CRLF = '\r\n'; var STATUS_CODES = _jx_helper.STATUS_CODES; exports.STATUS_CODES = STATUS_CODES; var connectionExpression = /Connection/i; var transferEncodingExpression = /Transfer-Encoding/i; var closeExpression = /close/i; var chunkExpression = /chunk/i; var contentLengthExpression = /Content-Length/i; var dateExpression = /Date/i; var expectExpression = /Expect/i; var continueExpression = /100-continue/i; var dateCache, oldDateCache = Date.now(); var utcDate = function() { var newDate = Date.now(); if (!dateCache || newDate > oldDateCache + 500) { var d = new Date(); dateCache = d.toUTCString(); oldDateCache = newDate; } return dateCache; }; function OutgoingMessage() { Stream.call(this); this.output = new Array(); this.outputEncodings = new Array(); this.writable = true; this._last = false; this.chunkedEncoding = false; this.shouldKeepAlive = true; this.useChunkedEncodingByDefault = true; this.sendDate = false; this._headerSent = false; this._header = ''; this._hasBody = true; this._trailer = ''; this.finished = false; this._hangupClose = false; this.socket = null; this.connection = null; } util.inherits(OutgoingMessage, Stream); exports.OutgoingMessage = OutgoingMessage; OutgoingMessage.prototype.setTimeout = function(msecs, callback) { if (callback) this.on('timeout', callback); if (!this.socket) { this.once('socket', function(socket) { socket.setTimeout(msecs); }); } else this.socket.setTimeout(msecs); }; // It's possible that the socket will be destroyed, and removed from // any messages, before ever calling this. In that case, just skip // it, since something else is destroying this connection anyway. OutgoingMessage.prototype.destroy = function(error) { if (this.socket) this.socket.destroy(error); else this.once('socket', function(socket) { socket.destroy(error); }); }; // This abstract either writing directly to the socket or buffering it. OutgoingMessage.prototype._send = function(data, encoding) { // This is a shameful hack to get the headers and first body chunk onto // the same packet. Future versions of Node are going to take care of // this at a lower level and in a more general way. if (!this._headerSent) { if (typeof data === 'string' && encoding !== 'hex' && encoding !== 'base64') { data = this._header + data; } else { this.output.unshift(this._header); this.outputEncodings.unshift('ascii'); } this._headerSent = true; } return this._writeRaw(data, encoding); }; OutgoingMessage.prototype._writeRaw = function(data, encoding) { if (data.length === 0) { return true; } if (this.connection && this.connection._httpMessage === this && this.connection.writable && !this.connection.destroyed) { // There might be pending data in the this.output buffer. while (this.output.length) { if (!this.connection.writable) { this._buffer(data, encoding); return false; } var c = this.output.shift(); var e = this.outputEncodings.shift(); this.connection.write(c, e); } // Directly write to socket. return this.connection.write(data, encoding); } else if (this.connection && this.connection.destroyed) { // The socket was destroyed. If we're still trying to write to it, // then we haven't gotten the 'close' event yet. return false; } else { // buffer, as long as we're not destroyed. this._buffer(data, encoding); return false; } }; OutgoingMessage.prototype._buffer = function(data, encoding) { this.output.push(data); this.outputEncodings.push(encoding); return false; }; OutgoingMessage.prototype._storeHeader = function(firstLine, headers) { // firstLine in the case of request is: 'GET /index.html HTTP/1.1\r\n' // in the case of response it is: 'HTTP/1.1 200 OK\r\n' var state = { sentConnectionHeader: false, sentContentLengthHeader: false, sentTransferEncodingHeader: false, sentDateHeader: false, sentExpect: false, messageHeader: firstLine }; var field, value; var self = this; if (headers) { var keys = Object.keys(headers); var isArray = (Array.isArray(headers)); var field, value; for (var i = 0, l = keys.length; i < l; i++) { var key = keys[i]; if (isArray) { field = headers[key][0]; value = headers[key][1]; } else { field = key; value = headers[key]; } if (Array.isArray(value)) { for (var j = 0, lnn = value.length; j < lnn; j++) { storeHeader(this, state, field, value[j]); } } else { storeHeader(this, state, field, value); } } } // Date header if (this.sendDate == true && state.sentDateHeader == false) { state.messageHeader += 'Date: ' + utcDate() + CRLF; } // Force the connection to close when the response is a 204 No Content or // a 304 Not Modified and the user has set a "Transfer-Encoding: chunked" // header. // // RFC 2616 mandates that 204 and 304 responses MUST NOT have a body but // node.js used to send out a zero chunk anyway to accommodate clients // that don't have special handling for those responses. // // It was pointed out that this might confuse reverse proxies to the point // of creating security liabilities, so suppress the zero chunk and force // the connection to close. var statusCode = this.statusCode; if ((statusCode == 204 || statusCode === 304) && this.chunkedEncoding === true) { debug(statusCode + ' response should not use chunked encoding,' + ' closing connection.'); this.chunkedEncoding = false; this.shouldKeepAlive = false; } // keep-alive logic if (state.sentConnectionHeader === false) { var shouldSendKeepAlive = this.shouldKeepAlive && (state.sentContentLengthHeader || this.useChunkedEncodingByDefault || this.agent); if (shouldSendKeepAlive) { state.messageHeader += 'Connection: keep-alive\r\n'; } else { this._last = true; state.messageHeader += 'Connection: close\r\n'; } } if (state.sentContentLengthHeader == false && state.sentTransferEncodingHeader == false) { if (this._hasBody) { if (this.useChunkedEncodingByDefault) { state.messageHeader += 'Transfer-Encoding: chunked\r\n'; this.chunkedEncoding = true; } else { this._last = true; } } else { // Make sure we don't end the 0\r\n\r\n at the end of the message. this.chunkedEncoding = false; } } this._header = state.messageHeader + CRLF; this._headerSent = false; // wait until the first body chunk, or close(), is sent to flush, // UNLESS we're sending Expect: 100-continue. if (state.sentExpect) this._send(''); // pin("OutgoingMessage.prototype._storeHeader-end"); }; function storeHeader(self, state, field, value) { // Protect against response splitting. The if statement is there to // minimize the performance impact in the common case. if (/[\r\n]/.test(value)) value = value.replace(/[\r\n]+[ \t]*/g, ''); state.messageHeader += field + ': ' + value + CRLF; if (connectionExpression.test(field)) { state.sentConnectionHeader = true; if (closeExpression.test(value)) { self._last = true; } else { self.shouldKeepAlive = true; } } else if (transferEncodingExpression.test(field)) { state.sentTransferEncodingHeader = true; if (chunkExpression.test(value)) self.chunkedEncoding = true; } else if (contentLengthExpression.test(field)) { state.sentContentLengthHeader = true; } else if (dateExpression.test(field)) { state.sentDateHeader = true; } else if (expectExpression.test(field)) { state.sentExpect = true; } } OutgoingMessage.prototype.setHeader = function(name, value) { if (arguments.length < 2) { throw new Error('`name` and `value` are required for setHeader().'); } if (this._header) { throw new Error('Can\'t set headers after they are sent.'); } var key = name.toLowerCase(); this._headers = this._headers || {}; this._headerNames = this._headerNames || {}; this._headers[key] = value; this._headerNames[key] = name; }; OutgoingMessage.prototype.getHeader = function(name) { if (arguments.length < 1) { throw new Error('`name` is required for getHeader().'); } if (!this._headers) return; var key = name.toLowerCase(); return this._headers[key]; }; OutgoingMessage.prototype.removeHeader = function(name) { if (arguments.length < 1) { throw new Error('`name` is required for removeHeader().'); } if (this._header) { throw new Error('Can\'t remove headers after they are sent.'); } if (!this._headers) { return; } var key = name.toLowerCase(); delete this._headers[key]; delete this._headerNames[key]; }; OutgoingMessage.prototype._renderHeaders = function() { if (this._header) { throw new Error('Can\'t render headers after they are sent to the client.'); } if (!this._headers) { return {}; } var headers = {}; var keys = Object.keys(this._headers); for (var i = 0, l = keys.length; i < l; i++) { var key = keys[i]; headers[this._headerNames[key]] = this._headers[key]; } return headers; }; Object.defineProperty(OutgoingMessage.prototype, 'headersSent', { configurable: true, enumerable: true, get: function() { return !!this._header; } }); // Convert a number in the range 0-15 to a lowercase hexadecimal digit. function hex(val) { // The comparison and bit hacks are deliberate. We could look up the // value in a buffer with hexdigits[val & 15] but that adds a couple // of bounds checks to each conversion. return val <= 9 ? (val | 48) : ((val - 9) | 96); } function chunkify(chunk, headers, trailers, last) { var chunklen = chunk.length; var buflen = chunklen + 4; // '\r\n' + chunk + '\r\n' var offset = 0; var octets = 1; // Skip expensive Buffer.byteLength() calls; only ISO-8859-1 characters // are allowed in HTTP headers, therefore: // // headers.length == Buffer.byteLength(headers.length) // trailers.length == Buffer.byteLength(trailers.length) // // Note: the actual encoding that is used is ASCII. That's de jure // a violation of the spec but de facto correct because many HTTP // clients get confused by non-ASCII headers. if (last === true) buflen += 5; // '0\r\n\r\n' if (headers !== '') buflen += headers.length; if (trailers !== '') buflen += trailers.length; if (chunklen & 0xf0000000) octets += 7; else if (chunklen & 0xf000000) octets += 6; else if (chunklen & 0xf00000) octets += 5; else if (chunklen & 0xf0000) octets += 4; else if (chunklen & 0xf000) octets += 3; else if (chunklen & 0xf00) octets += 2; else if (chunklen & 0xf0) octets += 1; buflen += octets; var buf = new Buffer(buflen); if (headers !== '') { buf.write(headers, 0, headers.length, 'ascii'); offset = headers.length; } // Write chunk length in hex to buffer. This effectively limits us // to 4 GB chunks but that's okay because buffers are max 1 GB anyway. switch (octets) { case 8: buf[offset++] = hex((chunklen >>> 28) & 15); case 7: buf[offset++] = hex((chunklen >>> 24) & 15); case 6: buf[offset++] = hex((chunklen >>> 20) & 15); case 5: buf[offset++] = hex((chunklen >>> 16) & 15); case 4: buf[offset++] = hex((chunklen >>> 12) & 15); case 3: buf[offset++] = hex((chunklen >>> 8) & 15); case 2: buf[offset++] = hex((chunklen >>> 4) & 15); } buf[offset++] = hex(chunklen & 15); // Add '\r\n'. buf[offset++] = 13; buf[offset++] = 10; // Copy buffer. chunk.copy(buf, offset); offset += chunklen; // Add trailing '\r\n'. buf[offset++] = 13; buf[offset++] = 10; if (last === true) { // Add trailing '0\r\n\r\n'. buf[offset++] = 48; buf[offset++] = 13; buf[offset++] = 10; buf[offset++] = 13; buf[offset++] = 10; } if (trailers !== '') { buf.write(trailers, offset, trailers.length, 'ascii'); } return buf; } OutgoingMessage.prototype.write = function(chunk, encoding) { if (!this._header) { this._implicitHeader(); } if (!this._hasBody) { debug('This type of response MUST NOT have a body. ' + 'Ignoring write() calls.'); return true; } if (typeof chunk !== 'string' && !Buffer.isBuffer(chunk)) { throw new TypeError('first argument must be a string or Buffer'); } // If we get an empty string or buffer, then just do nothing, and // signal the user to keep writing. if (chunk.length === 0) return true; var len, ret; if (this.chunkedEncoding) { if (typeof(chunk) === 'string' && encoding !== 'hex' && encoding !== 'base64') { len = Buffer.byteLength(chunk, encoding); chunk = len.toString(16) + CRLF + chunk + CRLF; ret = this._send(chunk, encoding); } else if (Buffer.isBuffer(chunk)) { var buf = chunkify(chunk, '', '', false); ret = this._send(buf, encoding); } else { // Non-toString-friendly encoding. if (typeof chunk === 'string') len = Buffer.byteLength(chunk, encoding); else len = chunk.length; this._send(len.toString(16) + CRLF, 'ascii'); this._send(chunk, encoding); ret = this._send(CRLF); } } else { ret = this._send(chunk, encoding); } debug('write ret = ' + ret); return ret; }; OutgoingMessage.prototype.addTrailers = function(headers) { this._trailer = ''; var keys = Object.keys(headers); var isArray = (Array.isArray(headers)); var field, value; for (var i = 0, l = keys.length; i < l; i++) { var key = keys[i]; if (isArray) { field = headers[key][0]; value = headers[key][1]; } else { field = key; value = headers[key]; } this._trailer += field + ': ' + value + CRLF; } }; var zero_chunk_buf = new Buffer('\r\n0\r\n'); var crlf_buf = new Buffer('\r\n'); var BIG_CHUNK = 120 * 1024; OutgoingMessage.prototype.end = function(data, encoding) { if (this.finished) { return false; } if (!this._header) { this._implicitHeader(); } if (data && !this._hasBody) { debug('This type of response MUST NOT have a body. ' + 'Ignoring data passed to end().'); data = false; } var ret; var ln = 0, lnbuffer = false; if (data) { ln = data.length; lnbuffer = Buffer.isBuffer(data); } var hot = this._headerSent === false && ln && this.output.length === 0 && this.connection && this.connection.writable && this.connection._httpMessage === this; // The benefits of the hot-path optimization below start to fall // off when the buffer size gets up near 128KB, because the cost // of the copy is more than the cost of the extra write() call. // Switch to the write/end method at that point. Heuristics and // magic numbers are awful, but slow http responses are worse. if (hot && lnbuffer && ln > BIG_CHUNK) hot = false; // Can't concatenate safely with hex or base64 encodings. if (encoding === 'hex' || encoding === 'base64') hot = false; if (hot) { if (!lnbuffer && typeof data === 'string') { if (this.chunkedEncoding) { var l = Buffer.byteLength(data, encoding).toString(16); ret = this.connection.write(this._header + l + CRLF + data + '\r\n0\r\n' + this._trailer + '\r\n', encoding); } else { ret = this.connection.write(this._header + data, encoding); } } else if (lnbuffer) { if (this.chunkedEncoding) { var buf = chunkify(data, this._header, this._trailer, true); ret = this.connection.write(buf); } else { var header_len = this._header.length; var buf = new Buffer(header_len + data.length); buf.write(this._header, 0, header_len, 'ascii'); data.copy(buf, header_len); ret = this.connection.write(buf); } } else { throw new TypeError('first argument must be a string or Buffer'); } this._headerSent = true; } else if (data) { // Normal body write. ret = this.write(data, encoding); } if (!hot) { if (this.chunkedEncoding) { ret = this._send('0\r\n' + this._trailer + '\r\n', 'ascii'); } else { // Force a flush, HACK. ret = this._send(''); } } this.finished = true; // There is the first message on the outgoing queue, and we've sent // everything to the socket. debug('outgoing message end.'); if (this.output.length === 0 && this.connection._httpMessage === this) { this._finish(); } return ret; }; OutgoingMessage.prototype._finish = function() { if (process.enableDTRACE) { assert(this.connection); if (this instanceof ServerResponse) { ; ; } else { assert(this instanceof ClientRequest); ; ; } } this.emit('finish'); }; OutgoingMessage.prototype._flush = function() { // This logic is probably a bit confusing. Let me explain a bit: // // In both HTTP servers and clients it is possible to queue up several // outgoing messages. This is easiest to imagine in the case of a client. // Take the following situation: // // req1 = client.request('GET', '/'); // req2 = client.request('POST', '/'); // // When the user does // // req2.write('hello world\n'); // // it's possible that the first request has not been completely flushed to // the socket yet. Thus the outgoing messages need to be prepared to queue // up data internally before sending it on further to the socket's queue. // // This function, outgoingFlush(), is called by both the Server and Client // to attempt to flush any pending messages out to the socket. if (!this.socket) { return; } var ret; while (this.output.length) { if (!this.socket.writable) return; // XXX Necessary? var data = this.output.shift(); var encoding = this.outputEncodings.shift(); ret = this.socket.write(data, encoding); } if (this.finished) { // This is a queue to the server or client to bring in the next this. this._finish(); } else if (ret) { // This is necessary to prevent https from breaking this.emit('drain'); } }; function ServerResponse(req) { OutgoingMessage.call(this); if (req.method === 'HEAD') this._hasBody = false; this.sendDate = true; if (req.httpVersionMajor < 1 || req.httpVersionMinor < 1) { this.useChunkedEncodingByDefault = chunkExpression.test(req.headers.te); this.shouldKeepAlive = false; } } util.inherits(ServerResponse, OutgoingMessage); exports.ServerResponse = ServerResponse; ServerResponse.prototype.statusCode = 200; function onServerResponseClose() { // EventEmitter.emit makes a copy of the 'close' listeners array before // calling the listeners. detachSocket() unregisters onServerResponseClose // but if detachSocket() is called, directly or indirectly, by a 'close' // listener, onServerResponseClose is still in that copy of the listeners // array. That is, in the example below, b still gets called even though // it's been removed by a: // // var obj = new events.EventEmitter; // obj.on('event', a); // obj.on('event', b); // function a() { obj.removeListener('event', b) } // function b() { throw "BAM!" } // obj.emit('event'); // throws // // Ergo, we need to deal with stale 'close' events and handle the case // where the ServerResponse object has already been deconstructed. // Fortunately, that requires only a single if check. :-) if (this._httpMessage) { this._httpMessage.emit('close'); } } ServerResponse.prototype.assignSocket = function(socket) { // pin("ServerResponse.prototype.assignSocket"); assert(!socket._httpMessage); socket._httpMessage = this; socket.on('close', onServerResponseClose); this.socket = socket; this.connection = socket; this.emit('socket', socket); this._flush(); }; ServerResponse.prototype.detachSocket = function(socket) { // pin("ServerResponse.prototype.detachSocket"); assert(socket._httpMessage == this); socket.removeListener('close', onServerResponseClose); socket._httpMessage = null; this.socket = this.connection = null; }; ServerResponse.prototype.writeContinue = function() { // pin("ServerResponse.prototype.writeContinue"); this._writeRaw('HTTP/1.1 100 Continue' + CRLF + CRLF, 'ascii'); this._sent100 = true; }; ServerResponse.prototype._implicitHeader = function() { this.writeHead(this.statusCode); }; ServerResponse.prototype.writeHead = function(statusCode, aa, bb) { var reasonPhrase, headers, obj; if (typeof aa === 'string') { reasonPhrase = aa; obj = bb; } else { reasonPhrase = STATUS_CODES[statusCode] || 'unknown'; obj = aa; } this.statusCode = statusCode; if (obj && this._headers) { // Slow-case: when progressive API and header fields are passed. headers = this._renderHeaders(); if (Array.isArray(obj)) { // handle array case // TODO: remove when array is no longer accepted var field; for (var i = 0, len = obj.length; i < len; ++i) { field = obj[i][0]; if (headers[field] !== undefined) { // don't use [] here ! JIT cant_compile var arr = new Array(2); arr[0] = field; arr[1] = headers[field]; obj.push(arr); } } headers = obj; } else { // handle object case var keys = Object.keys(obj); for (var i = 0, lnn = keys.length; i < lnn; i++) { var k = keys[i]; if (k) headers[k] = obj[k]; } } } else if (this._headers) { // only progressive api is used headers = this._renderHeaders(); } else { // only writeHead() called headers = obj; } var statusLine = 'HTTP/1.1 ' + statusCode.toString() + ' ' + reasonPhrase + CRLF; if (statusCode === 204 || statusCode === 304 || (100 <= statusCode && statusCode <= 199)) { // RFC 2616, 10.2.5: // The 204 response MUST NOT include a message-body, and thus is always // terminated by the first empty line after the header fields. // RFC 2616, 10.3.5: // The 304 response MUST NOT contain a message-body, and thus is always // terminated by the first empty line after the header fields. // RFC 2616, 10.1 Informational 1xx: // This class of status code indicates a provisional response, // consisting only of the Status-Line and optional headers, and is // terminated by an empty line. this._hasBody = false; } // don't keep alive connections where the client expects 100 Continue // but we sent a final status; they may put extra bytes on the wire. if (this._expect_continue && !this._sent100) { this.shouldKeepAlive = false; } this._storeHeader(statusLine, headers); }; ServerResponse.prototype.writeHeader = function() { this.writeHead.apply(this, arguments); }; // New Agent code. // The largest departure from the previous implementation is that // an Agent instance holds connections for a variable number of host:ports. // Surprisingly, this is still API compatible as far as third parties are // concerned. The only code that really notices the difference is the // request object. // Another departure is that all code related to HTTP parsing is in // ClientRequest.onSocket(). The Agent is now *strictly* // concerned with managing a connection pool. function Agent(options) { EventEmitter.call(this); var self = this; self.options = options || {}; self.requests = {}; self.sockets = {}; self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets; self.on('free', function(socket, host, port, localAddress) { var name = host + ':' + port; if (localAddress) { name += ':' + localAddress; } if (!socket.destroyed && self.requests[name] && self.requests[name].length) { self.requests[name].shift().onSocket(socket); if (self.requests[name].length === 0) { // don't leak delete self.requests[name]; } } else { // If there are no pending requests just destroy the // socket and it will get removed from the pool. This // gets us out of timeout issues and allows us to // default to Connection:keep-alive. socket.destroy(); } }); self.createConnection = net.createConnection; } util.inherits(Agent, EventEmitter); exports.Agent = Agent; Agent.defaultMaxSockets = 5; Agent.prototype.defaultPort = 80; Agent.prototype.addRequest = function(req, host, port, localAddress) { var name = host + ':' + port; if (localAddress) { name += ':' + localAddress; } if (!this.sockets[name]) { this.sockets[name] = []; } if (this.sockets[name].length < this.maxSockets) { // If we are under maxSockets create a new one. req.onSocket(this.createSocket(name, host, port, localAddress, req)); } else { // We are over limit so we'll add it to the queue. if (!this.requests[name]) { this.requests[name] = []; } this.requests[name].push(req); } }; Agent.prototype.createSocket = function(name, host, port, localAddress, req) { var self = this; var options = util._extend({}, self.options); options.port = port; options.host = host; options.localAddress = localAddress; if (!options.servername) { options.servername = host; if (req) { var hostHeader = req.getHeader('host'); if (hostHeader) options.servername = hostHeader.replace(/:.*$/, ''); } } var s = self.createConnection(options); if (!self.sockets[name]) { self.sockets[name] = new Array(); } this.sockets[name].push(s); var onFree = function() { self.emit('free', s, host, port, localAddress); } s.on('free', onFree); var onClose = function(err) { // This is the only place where sockets get removed from the Agent. // If you want to remove a socket from the pool, just close it. // All socket errors end in a close event anyway. self.removeSocket(s, name, host, port, localAddress); } s.on('close', onClose); var onRemove = function() { // We need this function for cases like HTTP 'upgrade' // (defined by WebSockets) where we need to remove a socket from the pool // because it'll be locked up indefinitely self.removeSocket(s, name, host, port, localAddress); s.removeListener('close', onClose); s.removeListener('free', onFree); s.removeListener('agentRemove', onRemove); } s.on('agentRemove', onRemove); return s; }; Agent.prototype.removeSocket = function(s, name, host, port, localAddress) {// pin("Agent.prototype.removeSocket"); if (this.sockets[name]) { var index = this.sockets[name].indexOf(s); if (index !== -1) { this.sockets[name].splice(index, 1); if (this.sockets[name].length === 0) { // don't leak delete this.sockets[name]; } } } if (this.requests[name] && this.requests[name].length) { var req = this.requests[name][0]; // If we have pending requests and a socket gets closed a new one this.createSocket(name, host, port, localAddress, req).emit('free'); } }; var globalAgent = new Agent(); exports.globalAgent = globalAgent; function ClientRequest(options, cb) { var self = this; OutgoingMessage.call(self); self.agent = options.agent; if (!options.agent && options.agent !== false && !options.createConnection) self.agent = globalAgent; var defaultPort = options.defaultPort || 80; var port = options.port || defaultPort; var host = options.hostname || options.host || 'localhost'; if (options.setHost === undefined) { var setHost = true; } self.socketPath = options.socketPath; var method = self.method = (options.method || 'GET').toUpperCase(); self.path = options.path || '/'; if (cb) { self.once('response', cb); } if (!Array.isArray(options.headers)) { if (options.headers) { var keys = Object.keys(options.headers); for (var i = 0, l = keys.length; i < l; i++) { var key = keys[i]; self.setHeader(key, options.headers[key]); } } if (host && !this.getHeader('host') && setHost) { var hostHeader = host; if (port && +port !== defaultPort) { hostHeader += ':' + port; } this.setHeader('Host', hostHeader); } } if (options.auth && !this.getHeader('Authorization')) { // basic auth this.setHeader('Authorization', 'Basic ' + new Buffer(options.auth).toString('base64')); } if (method === 'GET' || method === 'HEAD' || method === 'CONNECT') { self.useChunkedEncodingByDefault = false; } else { self.useChunkedEncodingByDefault = true; } if (Array.isArray(options.headers)) { self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n', options.headers); } else if (self.getHeader('expect')) { self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n', self._renderHeaders()); } if (self.socketPath) { self._last = true; self.shouldKeepAlive = false; if (options.createConnection) { self.onSocket(options.createConnection(self.socketPath)); } else { self.onSocket(net.createConnection(self.socketPath)); } } else if (self.agent) { // If there is an agent we should default to Connection:keep-alive. self._last = false; self.shouldKeepAlive = true; self.agent.addRequest(self, host, port, options.localAddress); } else { // No agent, default to Connection:close. self._last = true; self.shouldKeepAlive = false; if (options.createConnection) { options.port = port; options.host = host; var conn = options.createConnection(options); } else { var conn = net.createConnection({ port: port, host: host, localAddress: options.localAddress }); } self.onSocket(conn); } self._deferToConnect(null, null, function() { self._flush(); self = null; }); } util.inherits(ClientRequest, OutgoingMessage); exports.ClientRequest = ClientRequest; ClientRequest.prototype._implicitHeader = function() { // pin("ClientRequest.prototype._implicitHeader"); this._storeHeader(this.method + ' ' + this.path + ' HTTP/1.1\r\n', this._renderHeaders()); }; ClientRequest.prototype.abort = function() { // pin("ClientRequest.prototype.abort"); // If we're aborting, we don't care about any more response data. if (this.res) this.res._dump(); else this.once('response', function(res) { res._dump(); }); if (this.socket) { // in-progress this.socket.destroy(); } else { // haven't been assigned a socket yet. // this could be more efficient, it could // remove itself from the pending requests this._deferToConnect('destroy', []); } }; function createHangUpError(n) {// pin("createHangupError"); var error = new Error('socket hang up -' + n); error.code = 'ECONNRESET'; return error; } // Free the parser and also break any links that it // might have to any other things. // TODO: All parser data should be attached to a // single object, so that it can be easily cleaned // up by doing `parser.data = {}`, which should // be done in FreeList.free. `parsers.free(parser)` // should be all that is needed. function freeParser(parser, req) { if (parser) { parser._headers = new Array(); parser.onIncoming = null; if (parser.socket) { parser.socket.onend = null; parser.socket.ondata = null; parser.socket.parser = null; parser.socket = null; } parser.incoming = null; parsers.free(parser); parser = null; } if (req) { req.parser = null; } } function socketCloseListener() { var socket = this; var parser = socket.parser; var req = socket._httpMessage; debug('HTTP socket close'); req.emit('close'); if (req.res && req.res.readable) { // Socket closed before we emitted 'end' below. req.res.emit('aborted'); var res = req.res; res.on('end', function() { res.emit('close'); }); res.push(null); } else if (!req.res && !req._hadError) { // This socket error fired before we started to // receive a response. The error needs to // fire on the request. req.emit('error', createHangUpError(1)); req._hadError = true; } // Too bad. That output wasn't getting written. // This is pretty terrible that it doesn't raise an error. // Fixed better in v0.10 if (req.output) req.output.length = 0; if (req.outputEncodings) req.outputEncodings.length = 0; if (parser) { parser.finish(); freeParser(parser, req); } } function socketErrorListener(err) { var socket = this; var parser = socket.parser; var req = socket._httpMessage; debug('HTTP SOCKET ERROR: ' + err.message + '\n' + err.stack); if (req) { req.emit('error', err); // For Safety. Some additional errors might fire later on // and we need to make sure we don't double-fire the error event. req._hadError = true; } if (parser) { parser.finish(); freeParser(parser, req); } socket.destroy(); } function socketOnEnd() { var socket = this; var req = this._httpMessage; var parser = this.parser; if (!req.res) { // If we don't have a response then we know that the socket // ended prematurely and we need to emit an error on the request. req.emit('error', createHangUpError(2)); req._hadError = true; } if (parser) { parser.finish(); freeParser(parser, req); } socket.destroy(); } function socketOnData(d, start, end) { var socket = this; var req = this._httpMessage; var parser = this.parser; var ret = parser.execute(d, start, end - start, parser.__ptype); parser.__ptype = null; if (ret instanceof Error) { debug('parse error'); freeParser(parser, req); socket.destroy(); req.emit('error', ret); req._hadError = true; } else if (parser.incoming && parser.incoming.upgrade) { // Upgrade or CONNECT var bytesParsed = ret; var res = parser.incoming; req.res = res; socket.ondata = null; socket.onend = null; parser.finish(); // This is start + byteParsed var bodyHead = d.slice(start + bytesParsed, end); var eventName = req.method === 'CONNECT' ? 'connect' : 'upgrade'; if (EventEmitter.listenerCount(req, eventName) > 0) { req.upgradeOrConnect = true; // detach the socket socket.emit('agentRemove'); socket.removeListener('close', socketCloseListener); socket.removeListener('error', socketErrorListener); req.emit(eventName, res, socket, bodyHead); req.emit('close'); } else { // Got Upgrade header or CONNECT method, but have no handler. socket.destroy(); } freeParser(parser, req); } else if (parser.incoming && parser.incoming.complete && // When the status code is 100 (Continue), the server will // send a final response after this client sends a request // body. So, we must not free the parser. parser.incoming.statusCode !== 100) { freeParser(parser, req); } } // client function parserOnIncomingClient(res, shouldKeepAlive) {// pin("parseOnIncomingClient"); var parser = this; var socket = this.socket; var req = socket._httpMessage; // propogate "domain" setting... if (req.domain && !res.domain) { debug('setting "res.domain"'); res.domain = req.domain; } debug('AGENT incoming response!'); if (req.res) { // We already have a response object, this means the server // sent a double response. socket.destroy(); return; } req.res = res; // Responses to CONNECT request is handled as Upgrade. if (req.method === 'CONNECT') { res.upgrade = true; return true; // skip body } // Responses to HEAD requests are crazy. // HEAD responses aren't allowed to have an entity-body // but *can* have a content-length which actually corresponds // to the content-length of the entity-body had the request // been a GET. var isHeadResponse = req.method == 'HEAD'; debug('AGENT isHeadResponse ' + isHeadResponse); if (res.statusCode == 100) { // restart the parser, as this is a continue message. delete req.res; // Clear res so that we don't hit double-responses. req.emit('continue'); return true; } if (req.shouldKeepAlive && !shouldKeepAlive && !req.upgradeOrConnect) { // Server MUST respond with Connection:keep-alive for us to enable it. // If we've been upgraded (via WebSockets) we also shouldn't try to // keep the connection open. req.shouldKeepAlive = false; } if (process.enableDTRACE) { ; ; } req.res = res; res.req = req; // add our listener first, so that we guarantee socket cleanup res.on('end', responseOnEnd); var handled = req.emit('response', res); // If the user did not listen for the 'response' event, then they // can't possibly read the data, so we ._dump() it into the void // so that the socket doesn't hang there in a paused state. if (!handled) res._dump(); return isHeadResponse; } // client function responseOnEnd() {// pin("responseOnEnd"); var res = this; var req = res.req; var socket = req.socket; if (!req.shouldKeepAlive) { if (socket.writable) { debug('AGENT socket.destroySoon()'); socket.destroySoon(); } assert(!socket.writable); } else { debug('AGENT socket keep-alive'); if (req.timeoutCb) { socket.setTimeout(0, req.timeoutCb); req.timeoutCb = null; } socket.removeListener('close', socketCloseListener); socket.removeListener('error', socketErrorListener); // Mark this socket as available, AFTER user-added end // handlers have a chance to run. process.nextTick(function() {// pin("goFree"); socket.emit('free'); }); } } ClientRequest.prototype.onSocket = function(socket) { // pin("ClientRequest.prototype.onSocket"); var req = this; process.nextTick(function() {// pin("onSocketnextTick"); var parser = parsers.alloc(); req.socket = socket; req.connection = socket; parser.__ptype = HTTPParser.RESPONSE; // null; pin("RESPONSE - reinit"); // parser.reinitialize(HTTPParser.RESPONSE); parser.socket = socket; parser.incoming = null; req.parser = parser; socket.parser = parser; socket._httpMessage = req; // Setup "drain" propogation. httpSocketSetup(socket); // Propagate headers limit from request object to parser if (typeof req.maxHeadersCount === 'number') { parser.maxHeaderPairs = req.maxHeadersCount << 1; } else { // Set default value because parser may be reused from FreeList parser.maxHeaderPairs = 2000; } socket.on('error', socketErrorListener); socket.ondata = socketOnData; socket.onend = socketOnEnd; socket.on('close', socketCloseListener); parser.onIncoming = parserOnIncomingClient; req.emit('socket', socket); }); }; ClientRequest.prototype._deferToConnect = function(method, arguments_, cb) {// pin("_deferToConnect"); // This function is for calls that need to happen once the socket is // connected and writable. It's an important promisy thing for all the socket // calls that happen either now (when a socket is assigned) or // in the future (when a socket gets assigned out of the pool and is // eventually writable). var self = this; var onSocket = function() {// pin("xonSocket"); if (self.socket.writable) { if (method) { self.socket[method].apply(self.socket, arguments_); } if (cb) { cb(); } } else { self.socket.once('connect', function() {// pin("onceconnect"); if (method) { self.socket[method].apply(self.socket, arguments_); } if (cb) { cb(); } }); } } if (!self.socket) { self.once('socket', onSocket); } else { onSocket(); } }; ClientRequest.prototype.setTimeout = function(msecs, callback) {// pin("ClientRequest.prototype.setTimeout"); if (callback) this.once('timeout', callback); var self = this; function emitTimeout() { self.emit('timeout'); } if (this.socket && this.socket.writable) { if (this.timeoutCb) this.socket.setTimeout(0, this.timeoutCb); this.timeoutCb = emitTimeout; this.socket.setTimeout(msecs, emitTimeout); return; } // Set timeoutCb so that it'll get cleaned up on request end this.timeoutCb = emitTimeout; if (this.socket) { var sock = this.socket; this.socket.once('connect', function() { sock.setTimeout(msecs, emitTimeout); }); return; } this.once('socket', function(sock) { sock.setTimeout(msecs, emitTimeout); }); }; ClientRequest.prototype.setNoDelay = function() { this._deferToConnect('setNoDelay', arguments); }; ClientRequest.prototype.setSocketKeepAlive = function() { this._deferToConnect('setKeepAlive', arguments); }; ClientRequest.prototype.clearTimeout = function(cb) { this.setTimeout(0, cb); }; exports.request = function(options, cb) { if (typeof options === 'string') { options = url.parse(options); } if (options.protocol && options.protocol !== 'http:') { throw new Error('Protocol:' + options.protocol + ' not supported.'); } return new ClientRequest(options, cb); }; exports.get = function(options, cb) { var req = exports.request(options, cb); req.end(); return req; }; function ondrain() { if (this._httpMessage) this._httpMessage.emit('drain'); } function httpSocketSetup(socket) {// pin("httpSocketSetup"); socket.removeListener('drain', ondrain); socket.on('drain', ondrain); } function Server(requestListener) {// pin("Server"); if (!(this instanceof Server)) return new Server(requestListener); net.Server.call(this, { allowHalfOpen: true }); if (requestListener) { this.addListener('request', requestListener); } // Similar option to this. Too lazy to write my own docs. // http://www.squid-cache.org/Doc/config/half_closed_clients/ // http://wiki.squid-cache.org/SquidFaq/InnerWorkings#What_is_a_half-closed_filedescriptor.3F this.httpAllowHalfOpen = false; this.addListener('connection', connectionListener); this.addListener('clientError', function(err, conn) { conn.destroy(err); }); this.timeout = 2 * 60 * 1000; } util.inherits(Server, net.Server); Server.prototype.setTimeout = function(msecs, callback) { this.timeout = msecs; if (callback) this.on('timeout', callback); }; exports.Server = Server; exports.createServer = function(requestListener) { return new Server(requestListener); }; exports.setMaxHeaderLength = function(size) { if (size < 1024 && size != 0) { throw new RangeError( 'HTTP header size can not be smaller than 1024 bytes. ' + 'Set 0 to disable'); } maxHeaderSize = size; uw.setMaxHeaderLength(size); }; var maxHeaderWarningShown = false; var maxHeaderSize = 0; // commons.h function connectionListener(socket) { var self = this; var outgoing = new Array(); var incoming = new Array(); function abortIncoming() { while (incoming.length) { var req = incoming.shift(); req.emit('aborted'); req.emit('close'); } // abort socket._httpMessage ? } function serverSocketCloseListener() { debug('server socket close'); // mark this parser as reusable if (this.parser) freeParser(this.parser); if (incoming.length) abortIncoming(); } debug('SERVER new http connection'); httpSocketSetup(socket); // If the user has added a listener to the server, // request, or response, then it's their responsibility. // otherwise, destroy on timeout by default if (self.timeout) socket.setTimeout(self.timeout); socket.on('timeout', function() { var req = socket.parser && socket.parser.incoming; var reqTimeout = req && !req.complete && req.emit('timeout', socket); var res = socket._httpMessage; var resTimeout = res && res.emit('timeout', socket); var serverTimeout = self.emit('timeout', socket); if (!reqTimeout && !resTimeout && !serverTimeout) socket.destroy(); }); var parser = parsers.create(HTTPParser.REQUEST, socket); socket.parser = parser; // Propagate headers limit from server instance to parser if (typeof this.maxHeadersCount === 'number') { parser.maxHeaderPairs = this.maxHeadersCount << 1; } else { // Set default value because parser may be reused from FreeList parser.maxHeaderPairs = 2000; } socket.addListener('error', function(e) { self.emit('clientError', e, this); }); socket.ondata = function(d, start, end, parser_response) { var ret; if (parser_response === undefined) { assert(!socket._paused); ret = parser.execute(d, start, end - start, parser.__ptype); } else { ret = parser_response; } parser.__ptype = null; if (ret == -2) { if (!maxHeaderWarningShown) { var err = 'Request is denied for security reasons. ' + 'Maximum allowed header size is configured to ' + maxHeaderSize + ' bytes. You may replace it from http.setMaxHeaderLength'; debug(err); console.error(err); maxHeaderWarningShown = true; } socket.destroy(ret); return; } if (ret instanceof Error) { debug('parse error'); socket.destroy(ret); } else if (parser.incoming && parser.incoming.upgrade) { // Upgrade or CONNECT var bytesParsed = ret; var req = parser.incoming; socket.ondata = null; socket.onend = null; socket.removeListener('close', serverSocketCloseListener); parser.finish(); freeParser(parser, req); // This is start + byteParsed var bodyHead = d.slice(start + bytesParsed, end); var eventName = req.method === 'CONNECT' ? 'connect' : 'upgrade'; if (EventEmitter.listenerCount(self, eventName) > 0) { self.emit(eventName, req, req.socket, bodyHead); } else { // Got upgrade header or CONNECT method, but have no handler. socket.destroy(); } } if (socket._paused) { // onIncoming paused the socket, we should pause the parser as well debug('pause parser'); socket.parser.pause(); } }; socket.onend = function() { var ret = parser.finish(); if (ret instanceof Error) { debug('parse error'); socket.destroy(ret); return; } if (!self.httpAllowHalfOpen) { if (incoming.length) abortIncoming(); if (socket.writable) { socket.end(); } } else if (outgoing.length) { outgoing[outgoing.length - 1]._last = true; } else if (socket._httpMessage) { socket._httpMessage._last = true; } else { if (socket.writable) socket.end(); } }; socket.addListener('close', serverSocketCloseListener); // The following callback is issued after the headers have been read on a // new message. In this callback we setup the response object and pass it // to the user. socket._paused = false; function socketOnDrain() { // If we previously paused, then start reading again. if (socket._paused) { socket._paused = false; socket.parser.resume(); readStart(socket); } } socket.on('drain', socketOnDrain); parser.onIncoming = function(req, shouldKeepAlive) { incoming.push(req); // If the writable end isn't consuming, then stop reading // so that we don't become overwhelmed by a flood of // pipelined requests that may never be resolved. if (!socket._paused) { var needPause = socket._writableState.needDrain; if (needPause) { socket._paused = true; // We also need to pause the parser, but don't do that until after // the call to execute, because we may still be processing the last // chunk. readStop(socket); } } var res = new ServerResponse(req); res.shouldKeepAlive = shouldKeepAlive; if (process.enableDTRACE) { ; ; } if (socket._httpMessage) { // There are already pending outgoing res, append. outgoing.push(res); } else { res.assignSocket(socket); } // When we're finished writing the response, check if this is the last // respose, if so destroy the socket. res.on('finish', function() { // Usually the first incoming element should be our request. it may // be that in the case abortIncoming() was called that the incoming // array will be empty. assert(incoming.length == 0 || incoming[0] === req); incoming.shift(); // if the user never called req.read(), and didn't pipe() or // .resume() or .on('data'), then we call req._dump() so that the // bytes will be pulled off the wire. if (!req._consuming) req._dump(); res.detachSocket(socket); if (res._last) { socket.destroySoon(); } else { // start sending the next message var m = outgoing.shift(); if (m) { m.assignSocket(socket); } } }); if (req.headers.expect !== undefined && (req.httpVersionMajor == 1 && req.httpVersionMinor == 1) && continueExpression.test(req.headers['expect'])) { res._expect_continue = true; if (EventEmitter.listenerCount(self, 'checkContinue') > 0) { self.emit('checkContinue', req, res); } else { res.writeContinue(); self.emit('request', req, res); } } else { self.emit('request', req, res); } return false; // Not a HEAD response. (Not even a response!) }; } exports._connectionListener = connectionListener; // Legacy Interface function Client(port, host) { if (!(this instanceof Client)) return new Client(port, host); EventEmitter.call(this); host = host || 'localhost'; port = port || 80; this.host = host; this.port = port; this.agent = new Agent({ host: host, port: port, maxSockets: 1 }); } util.inherits(Client, EventEmitter); Client.prototype.request = function(method, path, headers) { var self = this; var options = {}; options.host = self.host; options.port = self.port; if (method[0] === '/') { headers = path; path = method; method = 'GET'; } options.method = method; options.path = path; options.headers = headers; options.agent = self.agent; var c = new ClientRequest(options); c.on('error', function(e) { self.emit('error', e); }); // The old Client interface emitted 'end' on socket end. // This doesn't map to how we want things to operate in the future // but it will get removed when we remove this legacy interface. c.on('socket', function(s) { s.on('end', function() { if (self._decoder) { var ret = self._decoder.end(); if (ret) self.emit('data', ret); } self.emit('end'); }); }); return c; }; exports.Client = util.deprecate(Client, 'http.Client will be removed soon. Do not use it.'); exports.createClient = util.deprecate(function(port, host) { return new Client(port, host); }, 'http.createClient is deprecated. Use `http.request` instead.'); // Copyright & License details are available under JXCORE_LICENSE file var util = require('util'); var pathModule = require('path'); var binding = process.binding('fs'); var constants = process.binding('constants'); var fs = exports; var Stream = require('stream').Stream; var EventEmitter = require('events').EventEmitter; var ex_data = process.binding('memory_wrap'); var Readable = Stream.Readable; var Writable = Stream.Writable; var isAndroid = process.platform === 'android' && process.isEmbedded; var kMinPoolSpace = 128; var O_APPEND = constants.O_APPEND || 0; var O_CREAT = constants.O_CREAT || 0; var O_DIRECTORY = constants.O_DIRECTORY || 0; var O_EXCL = constants.O_EXCL || 0; var O_NOCTTY = constants.O_NOCTTY || 0; var O_NOFOLLOW = constants.O_NOFOLLOW || 0; var O_RDONLY = constants.O_RDONLY || 0; var O_RDWR = constants.O_RDWR || 0; var O_SYMLINK = constants.O_SYMLINK || 0; var O_SYNC = constants.O_SYNC || 0; var O_TRUNC = constants.O_TRUNC || 0; var O_WRONLY = constants.O_WRONLY || 0; var isWinRT = process.platform === 'winrt'; var isWindows = process.platform === 'win32' || isWinRT; var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); function rethrow() { // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and // is fairly slow to generate. var callback; if (DEBUG) { var backtrace = new Error; callback = debugCallback; } else callback = missingCallback; return callback; function debugCallback(err) { if (err) { backtrace.message = err.message; err = backtrace; missingCallback(err); } } function missingCallback(err) { if (err) { if (process.throwDeprecation) throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs else if (!process.noDeprecation) { var msg = 'fs: missing callback ' + (err.stack || err.message); if (process.traceDeprecation) console.trace(msg); else console.error(msg); } } } } function maybeCallback(cb) { return typeof cb === 'function' ? cb : rethrow(); } // Ensure that callbacks run in the global context. Only use this function // for callbacks that are passed to the binding layer, callbacks that are // invoked from JS already run in the proper scope. function makeCallback(cb) { if (typeof cb !== 'function') { return rethrow(); } return function() { return cb.apply(null, arguments); }; } function assertEncoding(encoding) { if (encoding && !Buffer.isEncoding(encoding)) { throw new Error('Unknown encoding: ' + encoding); } } function nullCheck(path, callback) { if (('' + path).indexOf('\u0000') !== -1) { var er = new Error('Path must be a string without null bytes.'); if (!callback) throw er; process.nextTick(function() { callback(er); }); return false; } return true; } fs.Stats = binding.Stats; fs.Stats.prototype._checkModeProperty = function(property) { return ((this.mode & constants.S_IFMT) === property); }; fs.Stats.prototype.isDirectory = function() { return this._checkModeProperty(constants.S_IFDIR); }; fs.Stats.prototype.isFile = function() { return this._checkModeProperty(constants.S_IFREG); }; fs.Stats.prototype.isBlockDevice = function() { return this._checkModeProperty(constants.S_IFBLK); }; fs.Stats.prototype.isCharacterDevice = function() { return this._checkModeProperty(constants.S_IFCHR); }; fs.Stats.prototype.isSymbolicLink = function() { return this._checkModeProperty(constants.S_IFLNK); }; fs.Stats.prototype.isFIFO = function() { return this._checkModeProperty(constants.S_IFIFO); }; fs.Stats.prototype.isSocket = function() { return this._checkModeProperty(constants.S_IFSOCK); }; fs.exists = function(path, callback) { if (!nullCheck(path, cb)) return; if (!callback) return; function cb(err, stats) { if (err) { if (__existJX(path)) { callback(true); return; } } callback(!err); } binding.stat(pathModule._makeLong(path), cb); }; fs.readFile = function(path, options, callback_) { var callback = maybeCallback(arguments[arguments.length - 1]); if (typeof options === 'function' || !options) { options = {encoding: null, flag: 'r'}; } else if (typeof options === 'string') { options = {encoding: options, flag: 'r'}; } else if (!options) { options = {encoding: null, flag: 'r'}; } else if (typeof options !== 'object') { throw new TypeError('Bad arguments'); } var encoding = options.encoding; assertEncoding(encoding); if (path && !__existsSync(path)) { if (path.substr) { var res = null, err = null; try { res = __readFileSync(path, encoding); } catch(ex) { // the callback should be called for the error err = ex; } if (res || err) { setTimeout(function() { if (callback) { callback(err, res); } }, 0); return; } } } // first, stat the file, so we know the size. var size; var buffer; // single buffer with file data var buffers; // list for when size is unknown var pos = 0; var fd; var flag = options.flag || 'r'; fs.open(path, flag, 438 /* =0666 */, function(er, fd_) { if (er) return callback(er); fd = fd_; fs.fstat(fd, function(er, st) { if (er) { return fs.close(fd, function() { callback(er); }); } size = st.size; if (size === 0) { // the kernel lies about many files. // Go ahead and try to read some bytes. buffers = new Array(); return read(); } buffer = new Buffer(size); read(); }); }); function read() { if (size === 0) { buffer = new Buffer(8192); fs.read(fd, buffer, 0, 8192, -1, afterRead); } else { fs.read(fd, buffer, pos, size - pos, -1, afterRead); } } function afterRead(er, bytesRead) { if (er) { return fs.close(fd, function(er2) { return callback(er); }); } if (bytesRead === 0) { return close(); } pos += bytesRead; if (size !== 0) { if (pos === size) close(); else read(); } else { // unknown size, just read until we don't get bytes. buffers.push(buffer.slice(0, bytesRead)); read(); } } function close() { fs.close(fd, function(er) { if (size === 0) { // collected the data into the buffers list. buffer = Buffer.concat(buffers, pos); } else if (pos < size) { buffer = buffer.slice(0, pos); } if (encoding) buffer = buffer.toString(encoding); return callback(er, buffer); }); } }; fs.readFileSync = function(path, options) { if (!options) { options = {encoding: null, flag: 'r'}; } else if (typeof options === 'string') { options = {encoding: options, flag: 'r'}; } else if (typeof options !== 'object') { throw new TypeError('Bad arguments'); } var encoding = options.encoding; assertEncoding(encoding); var flag = options.flag || 'r'; if (path && !__existsSync(path)) { path += ''; var res = __readFileSync(path, encoding); if (res) return res; } var fd = fs.openSync(path, flag, 438 /* =0666 */); var size; var threw = true; try { size = fs.fstatSync(fd).size; threw = false; } finally { if (threw) fs.closeSync(fd); } var pos = 0; var buffer; // single buffer with file data var buffers; // list for when size is unknown if (size === 0) { buffers = new Array(); } else { var threw = true; try { buffer = new Buffer(size); threw = false; } finally { if (threw) fs.closeSync(fd); } } var done = false; while (!done) { var threw = true; try { if (size !== 0) { var bytesRead = fs.readSync(fd, buffer, pos, size - pos); } else { // the kernel lies about many files. // Go ahead and try to read some bytes. buffer = new Buffer(8192); var bytesRead = fs.readSync(fd, buffer, 0, 8192); if (bytesRead) { buffers.push(buffer.slice(0, bytesRead)); } } threw = false; } finally { if (threw) fs.closeSync(fd); } pos += bytesRead; done = (bytesRead === 0) || (size !== 0 && pos >= size); } fs.closeSync(fd); if (size === 0) { // data was collected into the buffers list. buffer = Buffer.concat(buffers, pos); } else if (pos < size) { buffer = buffer.slice(0, pos); } if (encoding) buffer = buffer.toString(encoding); return buffer; }; // Used by binding.open and friends function stringToFlags(flag) { // Only mess with strings if (typeof flag !== 'string') { return flag; } // O_EXCL is mandated by POSIX, Windows supports it too. // Let's add a check anyway, just in case. if (!O_EXCL && ~flag.indexOf('x')) { throw errnoException('ENOSYS', 'fs.open(O_EXCL)'); } switch (flag) { case 'r' : return O_RDONLY; case 'rs' : return O_RDONLY | O_SYNC; case 'r+' : return O_RDWR; case 'rs+' : return O_RDWR | O_SYNC; case 'w' : return O_TRUNC | O_CREAT | O_WRONLY; case 'wx' : // fall through case 'xw' : return O_TRUNC | O_CREAT | O_WRONLY | O_EXCL; case 'w+' : return O_TRUNC | O_CREAT | O_RDWR; case 'wx+': // fall through case 'xw+': return O_TRUNC | O_CREAT | O_RDWR | O_EXCL; case 'a' : return O_APPEND | O_CREAT | O_WRONLY; case 'ax' : // fall through case 'xa' : return O_APPEND | O_CREAT | O_WRONLY | O_EXCL; case 'a+' : return O_APPEND | O_CREAT | O_RDWR; case 'ax+': // fall through case 'xa+': return O_APPEND | O_CREAT | O_RDWR | O_EXCL; } throw new Error('Unknown file open flag: ' + flag); } // exported but hidden, only used by test/simple/test-fs-open-flags.js Object.defineProperty(exports, '_stringToFlags', { enumerable: false, value: stringToFlags }); // Yes, the follow could be easily DRYed up but I provide the explicit // list to make the arguments clear. fs.close = function(fd, callback) { binding.close(fd, makeCallback(callback)); }; fs.closeSync = function(fd) { return binding.close(fd); }; function modeNum(m, def) { switch (typeof m) { case 'number': return m; case 'string': return parseInt(m, 8); default: if (def) { return modeNum(def); } else { return undefined; } } } fs.open = function(path, flags, mode, callback) { callback = makeCallback(arguments[arguments.length - 1]); mode = modeNum(mode, 438 /* =0666 */); if (!nullCheck(path, callback)) return; binding.open(pathModule._makeLong(path), stringToFlags(flags), mode, callback); }; fs.openSync = function(path, flags, mode) { mode = modeNum(mode, 438 /* =0666 */); nullCheck(path); return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); }; fs.read = function(fd, buffer, offset, length, position, callback) { if (!Buffer.isBuffer(buffer)) { // legacy string interface (fd, length, position, encoding, callback) var cb = arguments[4], encoding = arguments[3]; assertEncoding(encoding); position = arguments[2]; length = arguments[1]; buffer = new Buffer(length); offset = 0; callback = function(err, bytesRead) { if (!cb) return; var str = (bytesRead > 0) ? buffer.toString(encoding, 0, bytesRead) : ''; (cb)(err, str, bytesRead); }; } function wrapper(err, bytesRead) { // Retain a reference to buffer so that it can't be GC'ed too soon. callback && callback(err, bytesRead || 0, buffer); } binding.read(fd, buffer, offset, length, position, wrapper); }; fs.readSync = function(fd, buffer, offset, length, position) { var legacy = false; if (!Buffer.isBuffer(buffer)) { // legacy string interface (fd, length, position, encoding, callback) legacy = true; var encoding = arguments[3]; assertEncoding(encoding); position = arguments[2]; length = arguments[1]; buffer = new Buffer(length); offset = 0; } var r = binding.read(fd, buffer, offset, length, position); if (!legacy) { return r; } var str = (r > 0) ? buffer.toString(encoding, 0, r) : ''; return [str, r]; }; fs.write = function(fd, buffer, offset, length, position, callback) { if (!Buffer.isBuffer(buffer)) { // legacy string interface (fd, data, position, encoding, callback) callback = arguments[4]; position = arguments[2]; assertEncoding(arguments[3]); buffer = new Buffer('' + arguments[1], arguments[3]); offset = 0; length = buffer.length; } if (!length) { if (typeof callback == 'function') { process.nextTick(function() { callback(undefined, 0); }); } return; } callback = maybeCallback(callback); function wrapper(err, written) { // Retain a reference to buffer so that it can't be GC'ed too soon. callback(err, written || 0, buffer); } binding.write(fd, buffer, offset, length, position, wrapper); }; fs.writeSync = function(fd, buffer, offset, length, position) { if (!Buffer.isBuffer(buffer)) { // legacy string interface (fd, data, position, encoding) position = arguments[2]; assertEncoding(arguments[3]); buffer = new Buffer('' + arguments[1], arguments[3]); offset = 0; length = buffer.length; } if (!length) return 0; return binding.write(fd, buffer, offset, length, position); }; fs.rename = function(oldPath, newPath, callback) { callback = makeCallback(callback); if (!nullCheck(oldPath, callback)) return; if (!nullCheck(newPath, callback)) return; binding.rename(pathModule._makeLong(oldPath), pathModule._makeLong(newPath), callback); }; fs.renameSync = function(oldPath, newPath) { nullCheck(oldPath); nullCheck(newPath); return binding.rename(pathModule._makeLong(oldPath), pathModule._makeLong(newPath)); }; fs.truncate = function(path, len, callback) { if (typeof path === 'number') { // legacy return fs.ftruncate(path, len, callback); } if (typeof len === 'function') { callback = len; len = 0; } else if (typeof len === 'undefined') { len = 0; } callback = maybeCallback(callback); fs.open(path, 'r+', function(er, fd) { if (er) return callback(er); binding.ftruncate(fd, len, function(er) { fs.close(fd, function(er2) { callback(er || er2); }); }); }); }; fs.truncateSync = function(path, len) { if (typeof path === 'number') { // legacy return fs.ftruncateSync(path, len); } if (typeof len === 'undefined') { len = 0; } // allow error to be thrown, but still close fd. var fd = fs.openSync(path, 'r+'); try { var ret = fs.ftruncateSync(fd, len); } finally { fs.closeSync(fd); } return ret; }; fs.ftruncate = function(fd, len, callback) { if (typeof len === 'function') { callback = len; len = 0; } else if (typeof len === 'undefined') { len = 0; } binding.ftruncate(fd, len, makeCallback(callback)); }; fs.ftruncateSync = function(fd, len) { if (typeof len === 'undefined') { len = 0; } return binding.ftruncate(fd, len); }; fs.rmdir = function(path, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; binding.rmdir(pathModule._makeLong(path), callback); }; fs.rmdirSync = function(path) { nullCheck(path); return binding.rmdir(pathModule._makeLong(path)); }; fs.fdatasync = function(fd, callback) { binding.fdatasync(fd, makeCallback(callback)); }; fs.fdatasyncSync = function(fd) { return binding.fdatasync(fd); }; fs.fsync = function(fd, callback) { binding.fsync(fd, makeCallback(callback)); }; fs.fsyncSync = function(fd) { return binding.fsync(fd); }; fs.mkdir = function(path, mode, callback) { if (typeof mode === 'function') callback = mode; callback = makeCallback(callback); if (!nullCheck(path, callback)) return; binding.mkdir(pathModule._makeLong(path), modeNum(mode, 511 /* =0777 */), callback); }; fs.mkdirSync = function(path, mode) { nullCheck(path); return binding.mkdir(pathModule._makeLong(path), modeNum(mode, 511 /* =0777 */)); }; fs.readdir = function(path, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; var exists_on_fs = __existsSync(path); if (!exists_on_fs) { var res = __readdirSync(path); if (res) { setTimeout(function() { if (callback) { callback(null, res); } }, 0); return; } } if (!isAndroid || !exists_on_fs) { binding.readdir(pathModule._makeLong(path), callback); } else { // we need to combine the APK contents to real ones. var dirs = binding.readdir(pathModule._makeLong(path)); var res = __readdirSync(path); if (res) { dirs = dirs.concat(res); } setTimeout(function(dirs_) { if (callback) { callback(null, dirs_); } }, 0, dirs); } }; fs.readdirSync = function(path) { nullCheck(path); var exists_on_fs = __existsSync(path); if (!exists_on_fs) { var res = __readdirSync(path); if (res) return res; } if (!isAndroid || !exists_on_fs) { return binding.readdir(pathModule._makeLong(path)); } else { // we need to combine the APK contents to real ones. var dirs = binding.readdir(pathModule._makeLong(path)); var res = __readdirSync(path); if (res) { dirs = dirs.concat(res); } return dirs; } }; fs.fstat = function(fd, callback) { binding.fstat(fd, makeCallback(callback)); }; fs.lstat = function(path, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; if (JXOnly(path)) { var dir = __hasFile(path); if (dir) { callback(null, dir); return; } } binding.lstat(pathModule._makeLong(path), callback); }; fs.stat = function(path, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; if (JXOnly(path)) { var dir = __hasFile(path); if (dir) { callback(null, dir); return; } } binding.stat(pathModule._makeLong(path), callback); }; fs.fstatSync = function(fd) { return binding.fstat(fd); }; fs.lstatSync = function(path) { nullCheck(path); if (JXOnly(path)) { var dir = __hasFile(path); if (dir) { return dir; } } return binding.lstat(pathModule._makeLong(path)); }; fs.statSync = function(path) { nullCheck(path); if (JXOnly(path)) { var dir = __hasFile(path); if (dir) { return dir; } } return binding.stat(pathModule._makeLong(path)); }; fs.readlink = function(path, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; binding.readlink(pathModule._makeLong(path), callback); }; fs.readlinkSync = function(path) { nullCheck(path); return binding.readlink(pathModule._makeLong(path)); }; function preprocessSymlinkDestination(path, type) { if (!isWindows) { // No preprocessing is needed on Unix. return path; } else if (type === 'junction') { // Junctions paths need to be absolute and \\?\-prefixed. return pathModule._makeLong(path); } else { // Windows symlinks don't tolerate forward slashes. return ('' + path).replace(/\//g, '\\'); } } fs.symlink = function(destination, path, type_, callback) { var type = (typeof type_ === 'string' ? type_ : null); var callback = makeCallback(arguments[arguments.length - 1]); if (!nullCheck(destination, callback)) return; if (!nullCheck(path, callback)) return; binding.symlink(preprocessSymlinkDestination(destination, type), pathModule._makeLong(path), type, callback); }; fs.symlinkSync = function(destination, path, type) { type = (typeof type === 'string' ? type : null); nullCheck(destination); nullCheck(path); return binding.symlink(preprocessSymlinkDestination(destination, type), pathModule._makeLong(path), type); }; fs.link = function(srcpath, dstpath, callback) { callback = makeCallback(callback); if (!nullCheck(srcpath, callback)) return; if (!nullCheck(dstpath, callback)) return; binding.link(pathModule._makeLong(srcpath), pathModule._makeLong(dstpath), callback); }; fs.linkSync = function(srcpath, dstpath) { nullCheck(srcpath); nullCheck(dstpath); return binding.link(pathModule._makeLong(srcpath), pathModule._makeLong(dstpath)); }; fs.unlink = function(path, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; binding.unlink(pathModule._makeLong(path), callback); }; fs.unlinkSync = function(path) { nullCheck(path); return binding.unlink(pathModule._makeLong(path)); }; fs.fchmod = function(fd, mode, callback) { binding.fchmod(fd, modeNum(mode), makeCallback(callback)); }; fs.fchmodSync = function(fd, mode) { return binding.fchmod(fd, modeNum(mode)); }; if (constants.hasOwnProperty('O_SYMLINK')) { fs.lchmod = function(path, mode, callback) { callback = maybeCallback(callback); fs.open(path, constants.O_WRONLY | constants.O_SYMLINK, function(err, fd) { if (err) { callback(err); return; } // prefer to return the chmod error, if one occurs, // but still try to close, and report closing errors if they occur. fs.fchmod(fd, mode, function(err) { fs.close(fd, function(err2) { callback(err || err2); }); }); }); }; fs.lchmodSync = function(path, mode) { var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK); // prefer to return the chmod error, if one occurs, // but still try to close, and report closing errors if they occur. var err, err2; try { var ret = fs.fchmodSync(fd, mode); } catch (er) { err = er; } try { fs.closeSync(fd); } catch (er) { err2 = er; } if (err || err2) throw (err || err2); return ret; }; } fs.chmod = function(path, mode, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; binding.chmod(pathModule._makeLong(path), modeNum(mode), callback); }; fs.chmodSync = function(path, mode) { nullCheck(path); return binding.chmod(pathModule._makeLong(path), modeNum(mode)); }; if (constants.hasOwnProperty('O_SYMLINK')) { fs.lchown = function(path, uid, gid, callback) { callback = maybeCallback(callback); fs.open(path, constants.O_WRONLY | constants.O_SYMLINK, function(err, fd) { if (err) { callback(err); return; } fs.fchown(fd, uid, gid, callback); }); }; fs.lchownSync = function(path, uid, gid) { var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK); return fs.fchownSync(fd, uid, gid); }; } fs.fchown = function(fd, uid, gid, callback) { binding.fchown(fd, uid, gid, makeCallback(callback)); }; fs.fchownSync = function(fd, uid, gid) { return binding.fchown(fd, uid, gid); }; fs.chown = function(path, uid, gid, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; binding.chown(pathModule._makeLong(path), uid, gid, callback); }; fs.chownSync = function(path, uid, gid) { nullCheck(path); return binding.chown(pathModule._makeLong(path), uid, gid); }; // converts Date or number to a fractional UNIX timestamp function toUnixTimestamp(time) { if (typeof time == 'number') { return time; } if (time instanceof Date) { // convert to 123.456 UNIX timestamp return time.getTime() / 1000; } throw new Error('Cannot parse time: ' + time); } // exported for unit tests, not for public consumption fs._toUnixTimestamp = toUnixTimestamp; fs.utimes = function(path, atime, mtime, callback) { callback = makeCallback(callback); if (!nullCheck(path, callback)) return; binding.utimes(pathModule._makeLong(path), toUnixTimestamp(atime), toUnixTimestamp(mtime), callback); }; fs.utimesSync = function(path, atime, mtime) { nullCheck(path); atime = toUnixTimestamp(atime); mtime = toUnixTimestamp(mtime); binding.utimes(pathModule._makeLong(path), atime, mtime); }; fs.futimes = function(fd, atime, mtime, callback) { atime = toUnixTimestamp(atime); mtime = toUnixTimestamp(mtime); binding.futimes(fd, atime, mtime, makeCallback(callback)); }; fs.futimesSync = function(fd, atime, mtime) { atime = toUnixTimestamp(atime); mtime = toUnixTimestamp(mtime); binding.futimes(fd, atime, mtime); }; function writeAll(fd, buffer, offset, length, position, callback) { callback = maybeCallback(arguments[arguments.length - 1]); fs.write(fd, buffer, offset, length, position, function(writeErr, written) { if (writeErr) { fs.close(fd, function() { if (callback) callback(writeErr); }); } else { if (written === length) { fs.close(fd, callback); } else { offset += written; length -= written; position += written; writeAll(fd, buffer, offset, length, position, callback); } } }); } fs.writeFile = function(path, data, options, callback) { var callback = maybeCallback(arguments[arguments.length - 1]); if (typeof options === 'function' || !options) { options = {encoding: 'utf8', mode: 438 /* =0666 */, flag: 'w'}; } else if (typeof options === 'string') { options = {encoding: options, mode: 438, flag: 'w'}; } else if (!options) { options = {encoding: 'utf8', mode: 438 /* =0666 */, flag: 'w'}; } else if (typeof options !== 'object') { throw new TypeError('Bad arguments'); } assertEncoding(options.encoding); var flag = options.flag || 'w'; fs.open(path, flag, options.mode, function(openErr, fd) { if (openErr) { if (callback) callback(openErr); } else { var buffer = Buffer.isBuffer(data) ? data : new Buffer('' + data, options.encoding || 'utf8'); var position = /a/.test(flag) ? null : 0; writeAll(fd, buffer, 0, buffer.length, position, callback); } }); }; fs.writeFileSync = function(path, data, options) { if (!options) { options = {encoding: 'utf8', mode: 438 /* =0666 */, flag: 'w'}; } else if (typeof options === 'string') { options = {encoding: options, mode: 438, flag: 'w'}; } else if (typeof options !== 'object') { throw new TypeError('Bad arguments'); } assertEncoding(options.encoding); var flag = options.flag || 'w'; var fd = fs.openSync(path, flag, options.mode); if (!Buffer.isBuffer(data)) { data = new Buffer('' + data, options.encoding || 'utf8'); } var written = 0; var length = data.length; var position = /a/.test(flag) ? null : 0; try { while (written < length) { written += fs.writeSync(fd, data, written, length - written, position); position += written; } } finally { fs.closeSync(fd); } }; fs.appendFile = function(path, data, options, callback_) { var callback = maybeCallback(arguments[arguments.length - 1]); if (typeof options === 'function' || !options) { options = {encoding: 'utf8', mode: 438 /* =0666 */, flag: 'a'}; } else if (typeof options === 'string') { options = {encoding: options, mode: 438, flag: 'a'}; } else if (!options) { options = {encoding: 'utf8', mode: 438 /* =0666 */, flag: 'a'}; } else if (typeof options !== 'object') { throw new TypeError('Bad arguments'); } if (!options.flag) options = util._extend({flag: 'a'}, options); fs.writeFile(path, data, options, callback); }; fs.appendFileSync = function(path, data, options) { if (!options) { options = {encoding: 'utf8', mode: 438 /* =0666 */, flag: 'a'}; } else if (typeof options === 'string') { options = {encoding: options, mode: 438, flag: 'a'}; } else if (typeof options !== 'object') { throw new TypeError('Bad arguments'); } if (!options.flag) options = util._extend({flag: 'a'}, options); fs.writeFileSync(path, data, options); }; function errnoException(errorno, syscall) { // TODO make this more compatible with ErrnoException from src/node.cc // Once all of Node is using this function the ErrnoException from // src/node.cc should be removed. var e = new Error(syscall + ' ' + errorno); e.errno = e.code = errorno; e.syscall = syscall; return e; } function FSWatcher() { EventEmitter.call(this); var self = this; var FSEvent = process.binding('fs_event_wrap').FSEvent; this._handle = new FSEvent(); this._handle.owner = this; this._handle.onchange = function(status, event, filename) { if (status) { self._handle.close(); self.emit('error', errnoException(process._errno, 'watch')); } else { self.emit('change', event, filename); } }; } util.inherits(FSWatcher, EventEmitter); FSWatcher.prototype.start = function(filename, persistent) { nullCheck(filename); var r = this._handle.start(pathModule._makeLong(filename), persistent); if (r) { this._handle.close(); throw errnoException(process._errno, 'watch'); } }; FSWatcher.prototype.close = function() { this._handle.close(); }; fs.watch = function(filename) { nullCheck(filename); var watcher; var options; var listener; if ('object' == typeof arguments[1]) { options = arguments[1]; listener = arguments[2]; } else { options = {}; listener = arguments[1]; } if (options.persistent === undefined) options.persistent = true; watcher = new FSWatcher(); watcher.start(filename, options.persistent); if (listener) { watcher.addListener('change', listener); } return watcher; }; // Stat Change Watchers function StatWatcher() { EventEmitter.call(this); var self = this; this._handle = new binding.StatWatcher(); // uv_fs_poll is a little more powerful than ev_stat but we curb it for // the sake of backwards compatibility var oldStatus = -1; this._handle.onchange = function(current, previous, newStatus) { if (oldStatus === -1 && newStatus === -1 && current.nlink === previous.nlink) return; oldStatus = newStatus; self.emit('change', current, previous); }; this._handle.onstop = function() { self.emit('stop'); }; } util.inherits(StatWatcher, EventEmitter); StatWatcher.prototype.start = function(filename, persistent, interval) { nullCheck(filename); this._handle.start(pathModule._makeLong(filename), persistent, interval); }; StatWatcher.prototype.stop = function() { this._handle.stop(); }; var statWatchers = {}; function inStatWatchers(filename) { return Object.prototype.hasOwnProperty.call(statWatchers, filename) && statWatchers[filename]; } fs.watchFile = function(filename) { nullCheck(filename); filename = pathModule.resolve(filename); var stat; var listener; var options = { // Poll interval in milliseconds. 5007 is what libev used to use. It's // a little on the slow side but let's stick with it for now to keep // behavioral changes to a minimum. interval: 5007, persistent: true }; if ('object' == typeof arguments[1]) { options = util._extend(options, arguments[1]); listener = arguments[2]; } else { listener = arguments[1]; } if (!listener) { throw new Error('watchFile requires a listener function'); } if (inStatWatchers(filename)) { stat = statWatchers[filename]; } else { stat = statWatchers[filename] = new StatWatcher(); stat.start(filename, options.persistent, options.interval); } stat.addListener('change', listener); return stat; }; fs.unwatchFile = function(filename, listener) { nullCheck(filename); filename = pathModule.resolve(filename); if (!inStatWatchers(filename)) return; var stat = statWatchers[filename]; if (typeof listener === 'function') { stat.removeListener('change', listener); } else { stat.removeAllListeners('change'); } if (EventEmitter.listenerCount(stat, 'change') === 0) { stat.stop(); statWatchers[filename] = undefined; } }; // Realpath // Not using realpath(2) because it's bad. // See: http://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html var normalize = pathModule.normalize; // Regexp that finds the next partion of a (partial) path // result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] if (isWindows) { var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; } else { var nextPartRe = /(.*?)(?:[\/]+|$)/g; } // Regex to find the device root, including trailing slash. E.g. 'c:\\'. if (isWindows) { var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; } else { var splitRootRe = /^[\/]*/; } fs.realpathSync = function realpathSync(_p, cache) { var p = pathModule.resolve(_p); if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { return cache[p]; } if (NativeModule.RootsLength && !fs.existsSync(p)) { var path = _p; var _add = ''; if (pathModule.extname(path) != '') { var lind = path.lastIndexOf(pathModule.sep); if (lind > 0) { path = path.substr(0, lind); } _add = _p.replace(path, pathModule.sep); } var zt = nameFix(path); if (NativeModule.Roots['.' + pathModule.sep + zt]) { zt = '.' + pathModule.sep + zt; } if (NativeModule.Roots[zt]) { return zt + _add; } } var original = p, seenLinks = {}, knownHard = {}; // current character position in p var pos; // the partial path so far, including a trailing slash if any var current; // the partial path without a trailing slash (except when pointing at a root) var base; // the partial path scanned in the previous round, with slash var previous; var start = function() { // Skip over roots var m = splitRootRe.exec(p); pos = m[0].length; current = m[0]; base = m[0]; previous = ''; // On windows, check that the root exists. On unix there is no need. if (!isWinRT && isWindows && !knownHard[base]) { fs.lstatSync(base); knownHard[base] = true; } }; start(); // walk down the path, swapping out linked pathparts for their real // values // NB: p.length changes. while (pos < p.length) { // find the next part nextPartRe.lastIndex = pos; var result = nextPartRe.exec(p); previous = current; current += result[0]; base = previous + result[1]; pos = nextPartRe.lastIndex; // continue if not a symlink if (knownHard[base] || (cache && cache[base] === base)) { continue; } var resolvedLink; if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { // some known symbolic link. no need to stat again. resolvedLink = cache[base]; } else { var stat; if (isWinRT) { try { stat = fs.lstatSync(base); } catch (e) { stat = null; } } else { stat = fs.lstatSync(base); } if (!stat || !stat.isSymbolicLink()) { knownHard[base] = true; if (cache) cache[base] = base; continue; } // read the link if it wasn't read before var linkTarget = null; // dev/ino on Windows is reliable only for file to file var windowsFolder = isWindows && stat.isDirectory(); var id; if (!windowsFolder) { id = stat.dev.toString(32) + ':' + stat.ino.toString(32); if (isWindows) id += ':' + stat.sequenceId; if (seenLinks.hasOwnProperty(id)) { linkTarget = seenLinks[id]; } } if (linkTarget === null) { fs.statSync(base); linkTarget = fs.readlinkSync(base); } resolvedLink = pathModule.resolve(previous, linkTarget); // track this, if given a cache. if (cache) cache[base] = resolvedLink; if (!windowsFolder) seenLinks[id] = linkTarget; } // resolve the link, then start over p = pathModule.resolve(resolvedLink, p.slice(pos)); start(); } if (cache) cache[original] = p; return p; }; fs.realpath = function realpath(p, cache, cb) { if (typeof cb !== 'function') { cb = maybeCallback(cache); cache = null; } // make p is absolute p = pathModule.resolve(p); if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { return process.nextTick(cb.bind(null, null, cache[p])); } var original = p, seenLinks = {}, knownHard = {}; // current character position in p var pos; // the partial path so far, including a trailing slash if any var current; // the partial path without a trailing slash (except when pointing at a root) var base; // the partial path scanned in the previous round, with slash var previous; start(); function start() { // Skip over roots var m = splitRootRe.exec(p); pos = m[0].length; current = m[0]; base = m[0]; previous = ''; // On windows, check that the root exists. On unix there is no need. if (!isWinRT && isWindows && !knownHard[base]) { fs.lstat(base, function(err) { if (err) return cb(err); knownHard[base] = true; LOOP(); }); } else { process.nextTick(LOOP); } } // walk down the path, swapping out linked pathparts for their real // values function LOOP() { // stop if scanned past end of path if (pos >= p.length) { if (cache) cache[original] = p; return cb(null, p); } // find the next part nextPartRe.lastIndex = pos; var result = nextPartRe.exec(p); previous = current; current += result[0]; base = previous + result[1]; pos = nextPartRe.lastIndex; // continue if not a symlink if (knownHard[base] || (cache && cache[base] === base)) { return process.nextTick(LOOP); } if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { // known symbolic link. no need to stat again. return gotResolvedLink(cache[base]); } return fs.lstat(base, gotStat); } function gotStat(err, stat) { if (err) return cb(err); // if not a symlink, skip to the next path part if (!stat.isSymbolicLink()) { knownHard[base] = true; if (cache) cache[base] = base; return process.nextTick(LOOP); } // stat & read the link if not read before // call gotTarget as soon as the link target is known var windowsFolder = isWindows && stat.isDirectory(); var id; // dev/ino on Windows is reliable only for file/file if (!windowsFolder) { id = stat.dev.toString(32) + ':' + stat.ino.toString(32); if (isWindows) id += ':' + stat.sequenceId; if (seenLinks.hasOwnProperty(id)) { return gotTarget(null, seenLinks[id], base); } } fs.stat(base, function(err) { if (err) return cb(err); fs.readlink(base, function(err, target) { if (!windowsFolder) seenLinks[id] = target; gotTarget(err, target); }); }); } function gotTarget(err, target, base) { if (err) return cb(err); var resolvedLink = pathModule.resolve(previous, target); if (cache) cache[base] = resolvedLink; gotResolvedLink(resolvedLink); } function gotResolvedLink(resolvedLink) { // resolve the link, then start over p = pathModule.resolve(resolvedLink, p.slice(pos)); start(); } }; var pool; function allocNewPool(poolSize) { pool = new Buffer(poolSize); pool.used = 0; } function __ReadStream(path, options) { this.path = path; this.options = options; this.length = 0; this.pipes = null; this.pipesCount = 0; this.flowing = false; this.ended = false; this.endEmitted = false; this.reading = false; var listeners = {}; var _this = this; this.on = function(target, cb) { if (!listeners[target]) { listeners[target] = new Array(); } listeners[target].push(cb); if (target == 'data') { process.nextTick(function() { _this.emit('data', __readFileSync(path)); }); } return _this; }; // this.once != this.on however // for this patched instance, it should end up similarly this.once = this.on; this.addListener = this.on; this.emit = function(target, param) { if (listeners[target]) { for (var o in listeners[target]) { if (listeners[target].hasOwnProperty(o)) listeners[target][o](param); } } }; this.target = null; this.pipe = function(target) { _this.target = target; var st = __readFileSync(path); _this.length = st.length; target.end(st); _this.ended = true; if (this.emit) { process.nextTick(function() { _this.emit('end'); _this.emit('finish'); }); } return target; }; this.destroy = function() { }; this.destroy.bind = function() { return function() { } }; this.close = function() { }; this.pause = function() { }; this.resume = function() { }; this.unpipe = function() { }; } fs.createReadStream = function(path, options) { if (JXOnly(path)) { return new __ReadStream(path, options); } return new ReadStream(path, options); }; util.inherits(ReadStream, Readable); fs.ReadStream = ReadStream; function ReadStream(path, options) { if (!(this instanceof ReadStream)) return new ReadStream(path, options); // a little bit bigger buffer and water marks by default options = util._extend({ highWaterMark: 64 * 1024 }, options || {}); Readable.call(this, options); this.path = path; this.fd = options.hasOwnProperty('fd') ? options.fd : null; this.flags = options.hasOwnProperty('flags') ? options.flags : 'r'; this.mode = options.hasOwnProperty('mode') ? options.mode : 438; /* =0666 */ this.start = options.hasOwnProperty('start') ? options.start : undefined; this.end = options.hasOwnProperty('end') ? options.end : undefined; this.autoClose = options.hasOwnProperty('autoClose') ? options.autoClose : true; this.pos = undefined; if (this.start !== undefined) { if ('number' !== typeof this.start) { throw new TypeError('start must be a Number'); } if (this.end === undefined) { this.end = Infinity; } else if ('number' !== typeof this.end) { throw new TypeError('end must be a Number'); } if (this.start > this.end) { throw new Error('start must be <= end'); } this.pos = this.start; } if (typeof this.fd !== 'number') this.open(); this.on('end', function() { if (this.autoClose) { this.destroy(); } }); } fs.FileReadStream = fs.ReadStream; // support the legacy name ReadStream.prototype.open = function() { var self = this; fs.open(this.path, this.flags, this.mode, function(er, fd) { if (er) { if (self.autoClose) { self.destroy(); } self.emit('error', er); return; } self.fd = fd; self.emit('open', fd); // start the flow of data. self.read(); }); }; ReadStream.prototype._read = function(n) { if (typeof this.fd !== 'number') return this.once('open', function() { this._read(n); }); if (this.destroyed) return; if (!pool || pool.length - pool.used < kMinPoolSpace) { // discard the old pool. pool = null; allocNewPool(this._readableState.highWaterMark); } // Grab another reference to the pool in the case that while we're // in the thread pool another read() finishes up the pool, and // allocates a new one. var thisPool = pool; var toRead = Math.min(pool.length - pool.used, n); var start = pool.used; if (this.pos !== undefined) toRead = Math.min(this.end - this.pos + 1, toRead); // already read everything we were supposed to read! // treat as EOF. if (toRead <= 0) return this.push(null); // the actual read. var self = this; fs.read(this.fd, pool, pool.used, toRead, this.pos, onread); // move the pool positions, and internal position for reading. if (this.pos !== undefined) this.pos += toRead; pool.used += toRead; function onread(er, bytesRead) { if (er) { if (self.autoClose) { self.destroy(); } self.emit('error', er); } else { var b = null; if (bytesRead > 0) b = thisPool.slice(start, start + bytesRead); self.push(b); } } }; ReadStream.prototype.destroy = function() { if (this.destroyed) return; this.destroyed = true; if ('number' === typeof this.fd) this.close(); }; ReadStream.prototype.close = function(cb) { var self = this; if (cb) this.once('close', cb); if (this.closed || 'number' !== typeof this.fd) { if ('number' !== typeof this.fd) { this.once('open', close); return; } return process.nextTick(this.emit.bind(this, 'close')); } this.closed = true; close(); function close(fd) { fs.close(fd || self.fd, function(er) { if (er) self.emit('error', er); else { self.emit('close'); } }); self.fd = null; } }; fs.createWriteStream = function(path, options) { return new WriteStream(path, options); }; util.inherits(WriteStream, Writable); fs.WriteStream = WriteStream; function WriteStream(path, options) { if (!(this instanceof WriteStream)) return new WriteStream(path, options); options = options || {}; Writable.call(this, options); this.path = path; this.fd = null; this.fd = options.hasOwnProperty('fd') ? options.fd : null; this.flags = options.hasOwnProperty('flags') ? options.flags : 'w'; this.mode = options.hasOwnProperty('mode') ? options.mode : 438; /* =0666 */ this.start = options.hasOwnProperty('start') ? options.start : undefined; this.pos = undefined; this.bytesWritten = 0; if (this.start !== undefined) { if ('number' !== typeof this.start) { throw new TypeError('start must be a Number'); } if (this.start < 0) { throw new Error('start must be >= zero'); } this.pos = this.start; } if ('number' !== typeof this.fd) this.open(); // dispose on finish. this.once('finish', this.close); } fs.FileWriteStream = fs.WriteStream; // support the legacy name WriteStream.prototype.open = function() { fs.open(this.path, this.flags, this.mode, function(er, fd) { if (er) { this.destroy(); this.emit('error', er); return; } this.fd = fd; this.emit('open', fd); }.bind(this)); }; WriteStream.prototype._write = function(data, encoding, cb) { if (!Buffer.isBuffer(data)) return this.emit('error', new Error('Invalid data')); if (typeof this.fd !== 'number') return this.once('open', function() { this._write(data, encoding, cb); }); var self = this; fs.write(this.fd, data, 0, data.length, this.pos, function(er, bytes) { if (er) { self.destroy(); return cb(er); } self.bytesWritten += bytes; cb(); }); if (this.pos !== undefined) this.pos += data.length; }; WriteStream.prototype.destroy = ReadStream.prototype.destroy; WriteStream.prototype.close = ReadStream.prototype.close; // There is no shutdown() for files. WriteStream.prototype.destroySoon = WriteStream.prototype.end; // SyncWriteStream is internal. DO NOT USE. // Temporary hack for process.stdout and process.stderr when piped to files. function SyncWriteStream(fd, options) { Stream.call(this); options = options || {}; this.fd = fd; this.writable = true; this.readable = false; this.autoClose = options.hasOwnProperty('autoClose') ? options.autoClose : true; } util.inherits(SyncWriteStream, Stream); // Export fs.SyncWriteStream = SyncWriteStream; SyncWriteStream.prototype.write = function(data, arg1, arg2) { var encoding, cb; // parse arguments if (arg1) { if (typeof arg1 === 'string') { encoding = arg1; cb = arg2; } else if (typeof arg1 === 'function') { cb = arg1; } else { throw new Error('bad arg'); } } assertEncoding(encoding); // Change strings to buffers. SLOW if (typeof data == 'string') { data = new Buffer(data, encoding); } fs.writeSync(this.fd, data, 0, data.length); if (cb) { process.nextTick(cb); } return true; }; SyncWriteStream.prototype.end = function(data, arg1, arg2) { if (data) { this.write(data, arg1, arg2); } this.destroy(); }; SyncWriteStream.prototype.destroy = function() { if (this.autoClose) fs.closeSync(this.fd); this.fd = null; this.emit('close'); return true; }; SyncWriteStream.prototype.destroySoon = SyncWriteStream.prototype.destroy; fs.existsSync = function(path) { var result = __existsSync(path); if (!result) { return __existJX(path); } return result; }; var __existsSync = function(path) { // checks the file system try { nullCheck(path); binding.stat(pathModule._makeLong(path)); return true; } catch (e) { return false; } }; var nameFix = function(a) { if (!a) return ''; var isw = process.platform === 'win32'; var repFrom = isw ? /[\/]/g : /[\\]/g; var repTo = isw ? '\\' : '/'; return a.replace(repFrom, repTo); }; var NativeModule = {Roots: {}}; var __existJX = function() { return false; }; var __hasFile = function() { return null; }; var __hasDir = function() { return null; }; var JXOnly = function() { return false; }; var __readFileSync = function() { return false; }; var __readdirSync = function(path) { return false; }; /** JXCORE_JXP* */ // define as a sync. it also applies to async calls // extensions have to be answering synced // // var extension = { // readFileSync: null, // readDirSync: null, // existsSync: null, // }; // // extensions['assetManager'] = extension; var extensions = {}; var extensions_count = 0; var fake_fs_dev = Date.now(); var stat_app_date = new Date(); try { NativeModule = require('native_module'); } catch (e) { NativeModule = {Roots: {}}; } exports.virtualFiles = { ino_unique: 1, ino_base: (process.threadId + 1) * 50000, getNewIno: function() { exports.virtualFiles.ino_unique %= 50000; return exports.virtualFiles.ino_base + (exports.virtualFiles.ino_unique++); }, set: function(location, size) { var dn = pathModule.dirname(location); var bn = pathModule.basename(location); if (!NativeModule.Roots[dn]) { NativeModule.Roots[dn] = {}; } NativeModule.Roots[dn][bn] = new exports.JXStats(size, 33188); } }; exports.setExtension = function(name, ext) { if (!extensions[name]) extensions_count++; extensions[name] = ext; }; exports.removeExtension = function(name) { if (extensions[name]) extensions_count--; delete extensions[name]; }; var getExtensions = function(method_name) { if (extensions_count == 0) return null; var arr = []; for (var o in extensions) { if (!o && o !== 0) continue; if (!extensions.hasOwnProperty(o)) continue; if (extensions[o][method_name]) arr.push(extensions[o][method_name]); } return arr; }; __readdirSync = function(path) { var arr = getExtensions('readDirSync'); if (arr) { for (var o in arr) { if (!arr.hasOwnProperty(o)) continue; var result = arr[o](path); if (result) { return result; } } } if (!NativeModule.RootsLength) return false; var zt = __hasDir(path); if (zt != null && NativeModule.Roots[zt]) { var arr = new Array(); var unq = {}; var l = NativeModule.Roots[zt]; for (var o in l) { if (!l.hasOwnProperty(o)) continue; unq[o] = 1; arr.push(o); } for (var o in NativeModule.Roots) { if (!NativeModule.Roots.hasOwnProperty(o)) continue; if (o.indexOf(zt + pathModule.sep) === 0) { var sub = o.replace(zt + pathModule.sep, ''); if (!sub.length) continue; while (sub.length && sub.charAt(0) == pathModule.sep) sub = sub.substr(1); var ind = sub.indexOf(pathModule.sep); if (ind > 0) { sub = sub.substr(0, ind); } ind = sub.indexOf(pathModule.sep); if (ind === -1 && sub.length && !unq[sub]) { unq[sub] = 1; arr.push(sub); } } } unq = null; return arr; } return false; }; __hasDir = function(path) { var arr = getExtensions('existsSync'); if (arr) { for (var o in arr) { if (!arr.hasOwnProperty(o)) continue; result = arr[o](path); if (result) { return path; } } } if (!NativeModule.RootsLength) return null; var zt = nameFix(path); if (NativeModule.Roots['.' + pathModule.sep + zt]) { zt = '.' + pathModule.sep + zt; } if (!NativeModule.Roots[zt]) { try { zt = pathModule.resolve(zt); } catch (e) { } } if (NativeModule.Roots[zt]) { return zt; } else { return null; } }; __hasFile = function(path, calledAgain) { var arr = getExtensions('existsSync'); if (arr) { for (var o in arr) { if (!arr.hasOwnProperty(o)) continue; result = arr[o](path); if (result && result.mode) { // result better carries size and mode return new exports.JXStats(null, null, result); } } } if (!NativeModule.RootsLength) return null; var ext = pathModule.extname(path); var _dir = path; if (ext && ext.length) { _dir = pathModule.dirname(path); } var dir = __hasDir(_dir); if (!dir) dir = __hasDir(pathModule._makeLong(_dir)); if (dir) { if ((!ext) || (ext && !ext.length)) { // mark as a folder return new exports.JXStats(340, 16877); } var bs = pathModule.basename(path); dir = NativeModule.Roots[dir][bs]; } // fix for __filename under a jx/native package if (!dir && !calledAgain && path.toLowerCase().slice(-6) === '.js.jx') return __hasFile(path.slice(0, -3), true); return dir; }; __existJX = function(path) { var result = false; if (NativeModule.RootsLength) { if (path && path.substr) { var bs = __hasFile(path); result = (bs != null && bs != undefined); } } if (!result) { var arr = getExtensions('existsSync'); if (arr) { for (var o in arr) { if (!arr.hasOwnProperty(o)) continue; result = arr[o](path); if (result) { break; } } } } return result; }; JXOnly = function(path) { var result = __existsSync(path); if (result) return false; return __existJX(path); }; __readFileSync = function(path, encoding) { var zt = path.toString().trim(); if (zt.indexOf('/../') > 0) { var arr = zt.split('/'), backup = new Array(); var step = 0; for (var o in arr) { if (!arr.hasOwnProperty(o)) continue; if (arr[o] != '..') { backup[step] = arr[o]; step++; } else { if (step) { step--; } } } zt = backup.join('/'); } zt = nameFix(zt); var ext = pathModule.extname(zt).toLowerCase(); if (ext != '.jx' || (zt.indexOf('.js.jx') == zt.length - 6 && zt.length > 6)) { if (zt.indexOf('.js.jx') != zt.length - 6) zt += '.jx'; if (!ex_data.existsSource('@' + zt)) { zt = pathModule._makeLong(path).replace('\\\\?\\', '') + '.jx'; } if (!ex_data.existsSource('@' + zt)) { try { zt = pathModule.resolve(zt); } catch (e) { } } if (ex_data.existsSource('@' + zt)) { if (ex_data.existsSource('X@' + zt)) { return false; } var source = ex_data.readSource('@' + zt, true); if (ext == '.js') { var ind = source.indexOf('return js;});\n'); if (ind > 0) { ind = source.indexOf('\n', ind); source = source.substr(ind + 1); source = source.replace('\n/*mouvz&tJXPoaQnodeJX&vz*/', ''); source = new Buffer(source); } } if (encoding) return source.toString(encoding); else return source; } } var arr = getExtensions('readFileSync'); if (arr) { for (var o in arr) { if (!arr.hasOwnProperty(o)) continue; var result = arr[o](path); if (result) { if (encoding) return result.toString(encoding); else return result; } } } return false; }; exports.JXStats = function(size, mode, props) { this.mode = mode; this.size = size; // just faking it. this is not a real file system this.dev = fake_fs_dev; if (props) { for (var o in props) { if (!props.hasOwnProperty(o)) continue; this[o] = props[o]; } } if (!this.hasOwnProperty('ino')) { this.ino = fs.virtualFiles.getNewIno(); } if (this.hasOwnProperty('atime')) { this['atime'] = new Date(this['atime']); this['mtime'] = new Date(this['mtime']); this['ctime'] = new Date(this['ctime']); } else { this['atime'] = stat_app_date; this['mtime'] = stat_app_date; this['ctime'] = stat_app_date; } this._checkModeProperty = function(property) { return ((this.mode & constants.S_IFMT) === property); }; this.isDirectory = function() { return this._checkModeProperty(constants.S_IFDIR); }; this.isFile = function() { return this._checkModeProperty(constants.S_IFREG); }; this.isBlockDevice = function() { return false; }; this.isCharacterDevice = function() { return false; }; this.isSymbolicLink = function() { return false; }; this.isFIFO = function() { return false; }; this.isSocket = function() { return false; }; }; // Copyright & License details are available under JXCORE_LICENSE file // This is a free list to avoid creating so many of the same object. exports.FreeList = function(name_, max_, constructor_) { this.name = name_; this.constructor = constructor_; this.max = max_; this.list = new Array(); this.alloc = function() { return this.list.length ? this.list.shift() : this.constructor.apply(this, arguments); }; this.free = function(obj) { if (this.list.length < this.max) { this.list.push(obj); } }; }; // Copyright & License details are available under JXCORE_LICENSE file var domain; exports.usingDomains = false; // By default EventEmitters will print a warning if more than // 10 listeners are added to it. This is a useful default which // helps finding memory leaks. // // Obviously not all Emitters should be limited to 10. This function allows // that to be increased. Set to zero for unlimited. var defaultMaxListeners = 10; function EventEmitter() { this.domain = null; if (exports.usingDomains) { // if there is an active domain, then attach to it. domain = domain || require('domain'); if (domain.active && !(this instanceof domain.Domain)) { this.domain = domain.active; } } this._events = this._events || {}; this._maxListeners = this._maxListeners || defaultMaxListeners; } exports.EventEmitter = EventEmitter; exports.EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== 'number' || n < 0 || isNaN(n)) throw new TypeError('n must be a positive number'); this._maxListeners = n; }; exports.EventEmitter.prototype.emit = function emit(type, arg1, arg2) { var skip = false; if (!this._events) { this._events = {}; skip = true; } // If there is no 'error' event listener then throw. if (type === 'error') { var eo = this._events.error; if (!eo || (typeof eo === 'object' && !eo.length)) { if (this.domain) { if (!arg1) arg1 = new TypeError('Uncaught, unspecified "error" event.'); arg1.domainEmitter = this; arg1.domain = this.domain; arg1.domainThrown = false; this.domain.emit('error', arg1); } else if (arg1 instanceof Error) { throw arg1; // Unhandled 'error' event } else { throw new TypeError('Uncaught, unspecified "error" event.'); } return false; } } if (skip || typeof type == 'undefined' || type === null) return false; if (!this._events.hasOwnProperty(type)) return false; var args, listeners; var handler = this._events[type]; var tph = (typeof handler); if (tph === 'undefined') return false; var domain_handler = (this.domain && this !== global.process); if (domain_handler) this.domain.enter(); if (tph === 'function') { switch (arguments.length) { // fast cases case 1: handler.call(this); break; case 2: handler.call(this, arg1); break; case 3: handler.call(this, arg1, arg2); break; // slower default: args = Array.prototype.slice.call(arguments, 1); handler.apply(this, args); } } else if (Array.isArray(handler)) { args = Array.prototype.slice.call(arguments, 1); listeners = handler.slice(); var len = listeners.length; for (var i = 0; i < len; i++) listeners[i].apply(this, args); } if (domain_handler) this.domain.exit(); return true; }; EventEmitter.prototype.addListener = function addListener(type, listener) { if (typeof listener !== 'function') throw new TypeError('listener must be a function'); if (!this._events) this._events = {}; else if (this._events.newListener) this.emit('newListener', type, typeof listener.listener === 'function' ? listener.listener : listener); if (!this._events.hasOwnProperty(type)) // Optimize the case of one listener. Don't need the extra array object. this._events[type] = listener; else if (Array.isArray(this._events[type])) { // If we've already got an array, just append. this._events[type].push(listener); } else { // Adding the second element, need to change to array. var arr = new Array(2); arr[0] = this._events[type]; arr[1] = listener; this._events[type] = arr; } // Check for listener leak var et = this._events[type]; if (Array.isArray(et) && !et.warned) { var m = this._maxListeners; if (m && m > 0 && et.length > m) { et.warned = true; console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', et.length); console.trace(); } } return this; }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.once = function once(type, listener) { if (typeof listener !== 'function') throw new TypeError('listener must be a function'); var fired = false; function g() { this.removeListener(type, g); if (!fired) { fired = true; listener.apply(this, arguments); } } g.listener = listener; this.on(type, g); return this; }; // emits a 'removeListener' event iff the listener was removed EventEmitter.prototype.removeListener = function removeListener(type, listener) { var list, position, length, i; if (typeof listener !== 'function') throw new TypeError('listener must be a function'); if (!this._events || !this._events.hasOwnProperty(type)) return this; list = this._events[type]; length = list.length; position = -1; if (list === listener || (typeof list.listener === 'function' && list.listener === listener)) { delete this._events[type]; if (this._events.removeListener) this.emit('removeListener', type, listener); } else if (typeof list === 'object') { for (i = length; i-- > 0;) { if (list[i] === listener || (list[i].listener && list[i].listener === listener)) { position = i; break; } } if (position < 0) return this; if (list.length === 1) { list.length = 0; delete this._events[type]; } else { list.splice(position, 1); } if (this._events.removeListener) this.emit('removeListener', type, listener); } return this; }; EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { var key, listeners; if (!this._events) return this; // not listening for removeListener, no need to emit if (!this._events.removeListener) { if (arguments.length === 0) this._events = {}; else if (this._events[type]) delete this._events[type]; return this; } // emit removeListener for all listeners on all events if (arguments.length === 0) { for (key in this._events) { if (key === 'removeListener' || !this._events.hasOwnProperty(key)) continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = {}; return this; } listeners = this._events[type]; if (typeof listeners === 'function') { this.removeListener(type, listeners); } else if (Array.isArray(listeners)) { // LIFO order while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); } delete this._events[type]; return this; }; EventEmitter.prototype.listeners = function listeners(type) { var ret; if (!this._events || !this._events[type]) ret = new Array(); else if (typeof this._events[type] === 'function') ret = [this._events[type]]; else ret = this._events[type].slice(); return ret; }; EventEmitter.listenerCount = function(emitter, type) { var ret; if (!emitter._events || !emitter._events[type]) ret = 0; else if (typeof emitter._events[type] === 'function') ret = 1; else ret = emitter._events[type].length; return ret; }; // Copyright & License details are available under JXCORE_LICENSE file var util = require('util'); var events = require('events'); var EventEmitter = events.EventEmitter; var inherits = util.inherits; // methods that are called when trying to shut down expliclitly bound EEs var endMethods = ['end', 'abort', 'destroy', 'destroySoon']; // communicate with events module, but don't require that // module to have to load this one, since this module has // a few side effects. events.usingDomains = true; // let the process know we're using domains process._usingDomains(); exports.Domain = Domain; exports.create = exports.createDomain = function(cb) { return new Domain(cb); }; // it's possible to enter one domain while already inside // another one. the stack is each entered domain. var stack = []; exports._stack = stack; // the active domain is always the one that we're currently in. exports.active = null; inherits(Domain, EventEmitter); function Domain() { EventEmitter.call(this); this.members = []; } Domain.prototype.enter = function() { if (this._disposed) return; // note that this might be a no-op, but we still need // to push it onto the stack so that we can pop it later. exports.active = process.domain = this; stack.push(this); }; Domain.prototype.exit = function() { // skip disposed domains, as usual, but also don't do anything if this // domain is not on the stack. var index = stack.lastIndexOf(this); if (this._disposed || index === -1) return; // exit all domains until this one. stack.splice(index); exports.active = stack[stack.length - 1]; process.domain = exports.active; }; // note: this works for timers as well. Domain.prototype.add = function(ee) { // disposed domains can't be used for new things. if (this._disposed) return; // already added to this domain. if (ee.domain === this) return; // has a domain already - remove it first. if (ee.domain) { ee.domain.remove(ee); } // check for circular Domain->Domain links. // This causes bad insanity! // // For example: // var d = domain.create(); // var e = domain.create(); // d.add(e); // e.add(d); // e.emit('error', er); // RangeError, stack overflow! if (this.domain && (ee instanceof Domain)) { for (var d = this.domain; d; d = d.domain) { if (ee === d) return; } } ee.domain = this; this.members.push(ee); }; Domain.prototype.remove = function(ee) { ee.domain = null; var index = this.members.indexOf(ee); if (index !== -1) { this.members.splice(index, 1); } }; Domain.prototype.run = function(fn) { return this.bind(fn)(); }; Domain.prototype.intercept = function(cb) { return this.bind(cb, true); }; Domain.prototype.bind = function(cb, interceptError) { // if cb throws, catch it here. var self = this; var b = function() { // disposing turns functions into no-ops if (self._disposed) return; if (this instanceof Domain) { return cb.apply(this, arguments); } // only intercept first-arg errors if explicitly requested. if (interceptError && arguments[0] && (arguments[0] instanceof Error)) { var er = arguments[0]; util._extend(er, { domainBound: cb, domainThrown: false, domain: self }); self.emit('error', er); return; } // remove first-arg if intercept as assumed to be the error-arg if (interceptError) { var len = arguments.length; var args; switch (len) { case 0: case 1: // no args that we care about. args = []; break; case 2: // optimization for most common case: cb(er, data) args = [arguments[1]]; break; default: // slower for less common case: cb(er, foo, bar, baz, ...) args = new Array(len - 1); for (var i = 1; i < len; i++) { args[i - 1] = arguments[i]; } break; } self.enter(); var ret = cb.apply(this, args); self.exit(); return ret; } self.enter(); var ret = cb.apply(this, arguments); self.exit(); return ret; }; b.domain = this; return b; }; Domain.prototype.dispose = function() { if (this._disposed) return; // if we're the active domain, then get out now. this.exit(); this.emit('dispose'); // remove error handlers. this.removeAllListeners(); this.on('error', function() { }); // try to kill all the members. // XXX There should be more consistent ways // to shut down things! this.members.forEach(function(m) { // if it's a timeout or interval, cancel it. clearTimeout(m); // drop all event listeners. if (m instanceof EventEmitter) { m.removeAllListeners(); // swallow errors m.on('error', function() { }); } // Be careful! // By definition, we're likely in error-ridden territory here, // so it's quite possible that calling some of these methods // might cause additional exceptions to be thrown. endMethods.forEach(function(method) { if (typeof m[method] === 'function') { try { m[method](); } catch (er) { } } }); }); // remove from parent domain, if there is one. if (this.domain) this.domain.remove(this); // kill the references so that they can be properly gc'ed. this.members.length = 0; // finally, mark this domain as 'no longer relevant' // so that it can't be entered or activated. this._disposed = true; }; // Copyright & License details are available under JXCORE_LICENSE file var cares = process.binding('cares_wrap'), net = require('net'), isIP = net.isIP; function errnoException(errorno, syscall) { // TODO make this more compatible with ErrnoException from src/node.cc // Once all of Node is using this function the ErrnoException from // src/node.cc should be removed. // For backwards compatibility. libuv returns ENOENT on NXDOMAIN. if (errorno == 'ENOENT') { errorno = 'ENOTFOUND'; } var e = new Error(syscall + ' ' + errorno); e.errno = e.code = errorno; e.syscall = syscall; return e; } // c-ares invokes a callback either synchronously or asynchronously, // but the dns API should always invoke a callback asynchronously. // // This function makes sure that the callback is invoked asynchronously. // It returns a function that invokes the callback within nextTick(). // // To avoid invoking unnecessary nextTick(), `immediately` property of // returned function should be set to true after c-ares returned. // // Usage: // // function someAPI(callback) { // callback = makeAsync(callback); // channel.someAPI(..., callback); // callback.immediately = true; // } function makeAsync(callback) { if (typeof callback !== 'function') { return callback; } return function asyncCallback() { if (asyncCallback.immediately) { // The API already returned, we can invoke the callback immediately. callback.apply(null, arguments); } else { var args = arguments; process.nextTick(function() { callback.apply(null, args); }); } }; } // Easy DNS A/AAAA look up // lookup(domain, [family,] callback) exports.lookup = function(domain, family_, callback_) { var family = family_, callback = callback_; // parse arguments if (arguments.length === 2) { callback = family; family = 0; } else if (!family) { family = 0; } else { family = +family; if (family !== 4 && family !== 6) { throw new Error('invalid argument: `family` must be 4 or 6'); } } callback = makeAsync(callback); if (!domain) { callback(null, null, family === 6 ? 6 : 4); return {}; } // Hack required for Windows because Win7 removed the // localhost entry from c:\WINDOWS\system32\drivers\etc\hosts // See http://daniel.haxx.se/blog/2011/02/21/localhost-hack-on-windows/ // TODO Remove this once c-ares handles this problem. if (process.platform === 'win32' && domain === 'localhost') { callback(null, '127.0.0.1', 4); return {}; } var matchedFamily = isIP(domain); if (matchedFamily) { callback(null, domain, matchedFamily); return {}; } function onanswer(addresses) { if (addresses) { if (family) { callback(null, addresses[0], family); } else { callback(null, addresses[0], addresses[0].indexOf(':') >= 0 ? 6 : 4); } } else { callback(errnoException(process._errno, 'getaddrinfo')); } } var wrap = cares.getaddrinfo(domain, family); if (!wrap) { throw errnoException(process._errno, 'getaddrinfo'); } wrap.oncomplete = onanswer; callback.immediately = true; return wrap; }; function resolver(bindingName) { var binding = cares[bindingName]; return function query(name, callback) { function onanswer(status, result) { if (!status) { callback(null, result); } else { callback(errnoException(process._errno, bindingName)); } } callback = makeAsync(callback); var wrap = binding(name, onanswer); if (!wrap) { throw errnoException(process._errno, bindingName); } callback.immediately = true; return wrap; } } var resolveMap = {}; exports.resolve4 = resolveMap.A = resolver('queryA'); exports.resolve6 = resolveMap.AAAA = resolver('queryAaaa'); exports.resolveCname = resolveMap.CNAME = resolver('queryCname'); exports.resolveMx = resolveMap.MX = resolver('queryMx'); exports.resolveNs = resolveMap.NS = resolver('queryNs'); exports.resolveTxt = resolveMap.TXT = resolver('queryTxt'); exports.resolveSrv = resolveMap.SRV = resolver('querySrv'); exports.resolveNaptr = resolveMap.NAPTR = resolver('queryNaptr'); exports.reverse = resolveMap.PTR = resolver('getHostByAddr'); exports.resolve = function(domain, type_, callback_) { var resolver, callback; if (typeof type_ == 'string') { resolver = resolveMap[type_]; callback = callback_; } else { resolver = exports.resolve4; callback = type_; } if (typeof resolver === 'function') { return resolver(domain, callback); } else { throw new Error('Unknown type "' + type_ + '"'); } }; // ERROR CODES exports.NODATA = 'ENODATA'; exports.FORMERR = 'EFORMERR'; exports.SERVFAIL = 'ESERVFAIL'; exports.NOTFOUND = 'ENOTFOUND'; exports.NOTIMP = 'ENOTIMP'; exports.REFUSED = 'EREFUSED'; exports.BADQUERY = 'EBADQUERY'; exports.ADNAME = 'EADNAME'; exports.BADFAMILY = 'EBADFAMILY'; exports.BADRESP = 'EBADRESP'; exports.CONNREFUSED = 'ECONNREFUSED'; exports.TIMEOUT = 'ETIMEOUT'; exports.EOF = 'EOF'; exports.FILE = 'EFILE'; exports.NOMEM = 'ENOMEM'; exports.DESTRUCTION = 'EDESTRUCTION'; exports.BADSTR = 'EBADSTR'; exports.BADFLAGS = 'EBADFLAGS'; exports.NONAME = 'ENONAME'; exports.BADHINTS = 'EBADHINTS'; exports.NOTINITIALIZED = 'ENOTINITIALIZED'; exports.LOADIPHLPAPI = 'ELOADIPHLPAPI'; exports.ADDRGETNETWORKPARAMS = 'EADDRGETNETWORKPARAMS'; exports.CANCELLED = 'ECANCELLED'; // Copyright & License details are available under JXCORE_LICENSE file var assert = require('assert'); var util = require('util'); var events = require('events'); var UDP = process.binding('udp_wrap').UDP; var BIND_STATE_UNBOUND = 0; var BIND_STATE_BINDING = 1; var BIND_STATE_BOUND = 2; // lazily loaded var cluster = null; var dns = null; var net = null; // no-op callback function noop() { } function isIP(address) { if (!net) net = require('net'); return net.isIP(address); } function lookup(address, family, callback) { if (!dns) dns = require('dns'); return dns.lookup(address, family, callback); } function lookup4(address, callback) { return lookup(address || '0.0.0.0', 4, callback); } function lookup6(address, callback) { return lookup(address || '::0', 6, callback); } function newHandle(type) { if (type == 'udp4') { var handle = new UDP; handle.lookup = lookup4; return handle; } if (type == 'udp6') { var handle = new UDP; handle.lookup = lookup6; handle.bind = handle.bind6; handle.send = handle.send6; return handle; } if (type == 'unix_dgram') throw new Error('unix_dgram sockets are not supported any more.'); throw new Error('Bad socket type specified. Valid types are: udp4, udp6'); } exports._createSocketHandle = function(address, port, addressType, fd) { // Opening an existing fd is not supported for UDP handles. assert(typeof fd !== 'number' || fd < 0); var handle = newHandle(addressType); if (port || address) { var r = handle.bind(address, port || 0, 0); if (r == -1) { handle.close(); handle = null; } } return handle; }; function Socket(type, listener) { events.EventEmitter.call(this); var handle = newHandle(type); handle.owner = this; this._handle = handle; this._receiving = false; this._bindState = BIND_STATE_UNBOUND; this.type = type; this.fd = null; // compatibility hack if (typeof listener === 'function') this.on('message', listener); } util.inherits(Socket, events.EventEmitter); exports.Socket = Socket; exports.createSocket = function(type, listener) { return new Socket(type, listener); }; function startListening(socket) { socket._handle.onmessage = onMessage; // Todo: handle errors socket._handle.recvStart(); socket._receiving = true; socket._bindState = BIND_STATE_BOUND; socket.fd = -42; // compatibility hack socket.emit('listening'); } function replaceHandle(self, newHandle) { // Set up the handle that we got from master. newHandle.lookup = self._handle.lookup; newHandle.bind = self._handle.bind; newHandle.send = self._handle.send; newHandle.owner = self; // Replace the existing handle by the handle we got from master. self._handle.close(); self._handle = newHandle; } Socket.prototype.bind = function(/* port, address, callback */) { var self = this; self._healthCheck(); if (this._bindState != BIND_STATE_UNBOUND) throw new Error('Socket is already bound'); this._bindState = BIND_STATE_BINDING; if (typeof arguments[arguments.length - 1] === 'function') self.once('listening', arguments[arguments.length - 1]); var UDP = process.binding('udp_wrap').UDP; if (arguments[0] instanceof UDP) { replaceHandle(self, arguments[0]); startListening(self); return; } var port = arguments[0]; var address = arguments[1]; if (typeof address === 'function') address = ''; // a.k.a. "any address" // resolve address first self._handle.lookup(address, function(err, ip) { if (err) { self._bindState = BIND_STATE_UNBOUND; self.emit('error', err); return; } if (!cluster) cluster = require('cluster'); if (cluster.isWorker) { cluster._getServer(self, ip, port, self.type, -1, function(handle, err) { if (err) return self.emit('error', errnoException(err, 'bind')); if (!self._handle) // handle has been closed in the mean time. return handle.close(); replaceHandle(self, handle); startListening(self); }); } else { if (!self._handle) return; // handle has been closed in the mean time if (self._handle.bind(ip, port || 0, /* flags= */0)) { self.emit('error', errnoException(process._errno, 'bind')); self._bindState = BIND_STATE_UNBOUND; // Todo: close? return; } startListening(self); } }); }; // thin wrapper around `send`, here for compatibility with dgram_legacy.js Socket.prototype.sendto = function(buffer, offset, length, port, address, callback) { if (typeof offset !== 'number' || typeof length !== 'number') throw new Error('send takes offset and length as args 2 and 3'); if (typeof address !== 'string') throw new Error(this.type + ' sockets must send to port, address'); this.send(buffer, offset, length, port, address, callback); }; Socket.prototype.send = function(buffer, offset, length, port, address, callback) { var self = this; if (!Buffer.isBuffer(buffer)) throw new TypeError('First argument must be a buffer object.'); offset = offset | 0; if (offset < 0) throw new RangeError('Offset should be >= 0'); if (offset >= buffer.length) throw new RangeError('Offset into buffer too large'); // Sending a zero-length datagram is kind of pointless but it _is_ // allowed, hence check that length >= 0 rather than > 0. length = length | 0; if (length < 0) throw new RangeError('Length should be >= 0'); if (offset + length > buffer.length) throw new RangeError('Offset + length beyond buffer length'); port = port | 0; if (port <= 0 || port > 65535) throw new RangeError('Port should be > 0 and < 65536'); callback = callback || noop; self._healthCheck(); if (self._bindState == BIND_STATE_UNBOUND) self.bind(0, null); // If the socket hasn't been bound yet, push the outbound packet onto the // send queue and send after binding is complete. if (self._bindState != BIND_STATE_BOUND) { // If the send queue hasn't been initialized yet, do it, and install an // event handler that flushes the send queue after binding is done. if (!self._sendQueue) { self._sendQueue = []; self.once('listening', function() { // Flush the send queue. for (var i = 0; i < self._sendQueue.length; i++) self.send.apply(self, self._sendQueue[i]); self._sendQueue = undefined; }); } self._sendQueue.push([buffer, offset, length, port, address, callback]); return; } self._handle.lookup(address, function(err, ip) { if (err) { if (callback) callback(err); self.emit('error', err); } else if (self._handle) { var req = self._handle.send(buffer, offset, length, port, ip); if (req) { req.oncomplete = afterSend; req.cb = callback; } else { // don't emit as error, dgram_legacy.js compatibility var err = errnoException(process._errno, 'send'); process.nextTick(function() { callback(err); }); } } }); }; function afterSend(status, handle, req, buffer) { var self = handle.owner; if (req.cb) req.cb(null, buffer.length); // compatibility with dgram_legacy.js } Socket.prototype.close = function() { this._healthCheck(); this._stopReceiving(); this._handle.close(); this._handle = null; this.emit('close'); }; Socket.prototype.address = function() { this._healthCheck(); var address = this._handle.getsockname(); if (!address) throw errnoException(process._errno, 'getsockname'); return address; }; Socket.prototype.setBroadcast = function(arg) { if (this._handle.setBroadcast((arg) ? 1 : 0)) { throw errnoException(process._errno, 'setBroadcast'); } }; Socket.prototype.setTTL = function(arg) { if (typeof arg !== 'number') { throw new TypeError('Argument must be a number'); } if (this._handle.setTTL(arg)) { throw errnoException(process._errno, 'setTTL'); } return arg; }; Socket.prototype.setMulticastTTL = function(arg) { if (typeof arg !== 'number') { throw new TypeError('Argument must be a number'); } if (this._handle.setMulticastTTL(arg)) { throw errnoException(process._errno, 'setMulticastTTL'); } return arg; }; Socket.prototype.setMulticastLoopback = function(arg) { arg = arg ? 1 : 0; if (this._handle.setMulticastLoopback(arg)) { throw errnoException(process._errno, 'setMulticastLoopback'); } return arg; // 0.4 compatibility }; Socket.prototype.addMembership = function(multicastAddress, interfaceAddress) { this._healthCheck(); if (!multicastAddress) { throw new Error('multicast address must be specified'); } if (this._handle.addMembership(multicastAddress, interfaceAddress)) { throw new errnoException(process._errno, 'addMembership'); } }; Socket.prototype.dropMembership = function(multicastAddress, interfaceAddress) { this._healthCheck(); if (!multicastAddress) { throw new Error('multicast address must be specified'); } if (this._handle.dropMembership(multicastAddress, interfaceAddress)) { throw new errnoException(process._errno, 'dropMembership'); } }; Socket.prototype._healthCheck = function() { if (!this._handle) throw new Error('Not running'); // error message from dgram_legacy.js }; Socket.prototype._stopReceiving = function() { if (!this._receiving) return; this._handle.recvStop(); this._receiving = false; this.fd = null; // compatibility hack }; function onMessage(handle, slab, start, len, rinfo) { var self = handle.owner; if (!slab) { return self.emit('error', errnoException(process._errno, 'recvmsg')); } rinfo.size = len; // compatibility self.emit('message', slab.slice(start, start + len), rinfo); } Socket.prototype.ref = function() { if (this._handle) this._handle.ref(); }; Socket.prototype.unref = function() { if (this._handle) this._handle.unref(); }; // TODO share with net_uv and others function errnoException(errorno, syscall) { var e = new Error(syscall + ' ' + errorno); e.errno = e.code = errorno; e.syscall = syscall; return e; } // Copyright & License details are available under JXCORE_LICENSE file var assert = require('assert'); var fork = require('child_process').fork; var net = require('net'); var EventEmitter = require('events').EventEmitter; var util = require('util'); function isObject(o) { return (typeof o === 'object' && o !== null); } var debug; if (process.env.NODE_DEBUG && /cluster/.test(process.env.NODE_DEBUG)) { debug = function(x) { var prefix = process.pid + ',' + (process.env.NODE_UNIQUE_ID ? 'Worker' : 'Master'); console.error(prefix, x); }; } else { debug = function() { }; } // cluster object: function Cluster() { EventEmitter.call(this); } util.inherits(Cluster, EventEmitter); var cluster = module.exports = new Cluster(); // Used in the master: var masterStarted = false; var ids = 0; var serverHandlers = {}; // Used in the worker: var serverListeners = {}; var queryIds = 0; var queryCallbacks = {}; // Define isWorker and isMaster cluster.isWorker = 'NODE_UNIQUE_ID' in process.env; cluster.isMaster = !cluster.isWorker; // The worker object is only used in a worker cluster.worker = cluster.isWorker ? {} : null; // The workers array is only used in the master cluster.workers = cluster.isMaster ? {} : null; // Settings object var settings = cluster.settings = {}; // Simple function to call a function on each worker function eachWorker(cb) { // Go through all workers for (var id in cluster.workers) { if (cluster.workers.hasOwnProperty(id)) { cb(cluster.workers[id]); } } } // Extremely simple progress tracker function ProgressTracker(missing, callback) { this.missing = missing; this.callback = callback; } ProgressTracker.prototype.done = function() { this.missing -= 1; this.check(); }; ProgressTracker.prototype.check = function() { if (this.missing === 0) this.callback(); }; cluster.setupMaster = function(options) { // This can only be called from the master. assert(cluster.isMaster); // Don't allow this function to run more than once if (masterStarted) return; masterStarted = true; // Get filename and arguments options = options || {}; // By default, V8 writes the profile data of all processes to a single // v8.log. // // Running that log file through a tick processor produces bogus numbers // because many events won't match up with the recorded memory mappings // and you end up with graphs where 80+% of ticks is unaccounted for. // // Fixing the tick processor to deal with multi-process output is not very // useful because the processes may be running wildly disparate workloads. // // That's why we fix up the command line arguments to include // a "--logfile=v8-%p.log" argument (where %p is expanded to the PID) // unless it already contains a --logfile argument. var execArgv = options.execArgv || process.execArgv; if (execArgv.some(function(s) { return /^--prof/.test(s); }) && !execArgv.some(function(s) { return /^--logfile=/.test(s); })) { execArgv = execArgv.slice(); execArgv.push('--logfile=v8-%p.log'); } // Set settings object settings = cluster.settings = { exec: options.exec || process.argv[1], execArgv: execArgv, args: options.args || process.argv.slice(2), silent: options.silent || false }; if (!options.exec && process._MTED) { settings.exec = process.argv[2]; } // emit setup event cluster.emit('setup'); }; // Check if a message is internal only var INTERNAL_PREFIX = 'NODE_CLUSTER_'; function isInternalMessage(message) { return isObject(message) && typeof message.cmd === 'string' && message.cmd.length > INTERNAL_PREFIX.length && message.cmd.slice(0, INTERNAL_PREFIX.length) === INTERNAL_PREFIX; } // Modify message object to be internal function internalMessage(inMessage) { var outMessage = util._extend({}, inMessage); // Add internal prefix to cmd outMessage.cmd = INTERNAL_PREFIX + (outMessage.cmd || ''); return outMessage; } // Handle callback messages function handleResponse(outMessage, outHandle, inMessage, inHandle, worker) { // The message there will be sent var message = internalMessage(outMessage); // callback id - will be undefined if not set message._queryEcho = inMessage._requestEcho; // Call callback if a query echo is received if (inMessage._queryEcho) { queryCallbacks[inMessage._queryEcho](inMessage.content, inHandle); delete queryCallbacks[inMessage._queryEcho]; } // Send if outWrap contains something useful if (!(outMessage === undefined && message._queryEcho === undefined)) { sendInternalMessage(worker, message, outHandle); } } // Handle messages from both master and workers var messageHandler = {}; function handleMessage(worker, inMessage, inHandle) { // Remove internal prefix var message = util._extend({}, inMessage); message.cmd = inMessage.cmd.substr(INTERNAL_PREFIX.length); var respondUsed = false; function respond(outMessage, outHandler) { respondUsed = true; handleResponse(outMessage, outHandler, inMessage, inHandle, worker); } // Run handler if it exists if (messageHandler[message.cmd]) { messageHandler[message.cmd](message, worker, respond); } // Send respond if it hasn't been called yet if (respondUsed === false) { respond(); } } // Messages to the master will be handled using these methods if (cluster.isMaster) { // Handle online messages from workers messageHandler.online = function(message, worker) { worker.state = 'online'; debug('Worker ' + worker.process.pid + ' online'); worker.emit('online'); cluster.emit('online', worker); }; // Handle queryServer messages from workers messageHandler.queryServer = function(message, worker, send) { // This sequence of information is unique to the connection // but not to the worker var args = [message.address, message.port, message.addressType, message.fd]; var key = args.join(':'); var handler; if (serverHandlers.hasOwnProperty(key)) { handler = serverHandlers[key]; } else { if (message.addressType === 'udp4' || message.addressType === 'udp6') { var dgram = require('dgram'); handler = dgram._createSocketHandle.apply(net, args); } else { handler = net._createServerHandle.apply(net, args); } if (!handler) { send({ content: { error: process._errno } }, null); return; } serverHandlers[key] = handler; } // echo callback with the fd handler associated with it send({}, handler); }; // Handle listening messages from workers messageHandler.listening = function(message, worker) { worker.state = 'listening'; // Emit listening, now that we know the worker is listening worker.emit('listening', { address: message.address, port: message.port, addressType: message.addressType, fd: message.fd }); cluster.emit('listening', worker, { address: message.address, port: message.port, addressType: message.addressType, fd: message.fd }); }; // Handle suicide messages from workers messageHandler.suicide = function(message, worker) { worker.suicide = true; }; } // Messages to a worker will be handled using these methods else if (cluster.isWorker) { // Handle worker.disconnect from master messageHandler.disconnect = function(message, worker) { worker.disconnect(); }; } function toDecInt(value) { value = parseInt(value, 10); return isNaN(value) ? null : value; } // Create a worker object, that works both for master and worker function Worker(customEnv) { if (!(this instanceof Worker)) return new Worker(); EventEmitter.call(this); var self = this; var env = process.env; // Assign a unique id, default null this.id = cluster.isMaster ? ++ids : toDecInt(env.NODE_UNIQUE_ID); // XXX: Legacy. Remove in 0.9 this.workerID = this.uniqueID = this.id; // Assign state this.state = 'none'; // Create or get process if (cluster.isMaster) { // Create env object // first: copy and add id property var envCopy = util._extend({}, env); envCopy['NODE_UNIQUE_ID'] = this.id; // second: extend envCopy with the env argument if (isObject(customEnv)) { envCopy = util._extend(envCopy, customEnv); } // fork worker this.process = fork(settings.exec, settings.args, { 'env': envCopy, 'silent': settings.silent, 'execArgv': settings.execArgv }); } else { this.process = process; } if (cluster.isMaster) { // Save worker in the cluster.workers array cluster.workers[this.id] = this; // Emit a fork event, on next tick // There is no worker.fork event since this has no real purpose process.nextTick(function() { cluster.emit('fork', self); }); } // handle internalMessage, exit and disconnect event this.process.on('internalMessage', handleMessage.bind(null, this)); this.process.once('exit', function(exitCode, signalCode) { prepareExit(self, 'dead'); self.emit('exit', exitCode, signalCode); cluster.emit('exit', self, exitCode, signalCode); }); this.process.once('disconnect', function() { prepareExit(self, 'disconnected'); self.emit('disconnect'); cluster.emit('disconnect', self); }); // relay message and error this.process.on('message', this.emit.bind(this, 'message')); this.process.on('error', this.emit.bind(this, 'error')); } util.inherits(Worker, EventEmitter); cluster.Worker = Worker; function prepareExit(worker, state) { // set state to disconnect worker.state = state; // Make suicide a boolean worker.suicide = !!worker.suicide; // Remove from workers in the master if (cluster.isMaster) { delete cluster.workers[worker.id]; } } // Send internal message function sendInternalMessage(worker, message/* , handler, callback */) { // Exist callback var callback = arguments[arguments.length - 1]; if (typeof callback !== 'function') { callback = undefined; } // exist handler var handler = arguments[2] !== callback ? arguments[2] : undefined; if (!isInternalMessage(message)) { message = internalMessage(message); } // Store callback for later if (callback) { message._requestEcho = worker.id + ':' + (++queryIds); queryCallbacks[message._requestEcho] = callback; } worker.send(message, handler); } // Send message to worker or master Worker.prototype.send = function() { // You could also just use process.send in a worker this.process.send.apply(this.process, arguments); }; // Kill the worker without restarting Worker.prototype.kill = Worker.prototype.destroy = function(signal) { if (!signal) signal = 'SIGTERM'; var self = this; this.suicide = true; if (cluster.isMaster) { // Disconnect IPC channel // this way the worker won't need to propagate suicide state to master if (self.process.connected) { self.process.once('disconnect', function() { self.process.kill(signal); }); self.process.disconnect(); } else { self.process.kill(signal); } } else { // Channel is open if (this.process.connected) { // Inform master to suicide and then kill sendInternalMessage(this, { cmd: 'suicide' }, function() { process.exit(0); }); // When channel is closed, terminate the process this.process.once('disconnect', function() { process.exit(0); }); } else { process.exit(0); } } }; // The .disconnect function will close all servers // and then disconnect the IPC channel. if (cluster.isMaster) { // Used in master Worker.prototype.disconnect = function() { this.suicide = true; sendInternalMessage(this, { cmd: 'disconnect' }); }; } else { // Used in workers Worker.prototype.disconnect = function() { var self = this; this.suicide = true; // keep track of open servers var servers = Object.keys(serverListeners).length; var progress = new ProgressTracker(servers, function() { // There are no more servers open so we will close the IPC channel. // Closing the IPC channel will emit a disconnect event // in both master and worker on the process object. // This event will be handled by prepareExit. self.process.disconnect(); }); // depending on where this function was called from (master or worker) // The suicide state has already been set, // but it doesn't really matter if we set it again. sendInternalMessage(this, { cmd: 'suicide' }, function() { // in case there are no servers progress.check(); // closing all servers gracefully var server; for (var key in serverListeners) { if (!serverListeners.hasOwnProperty(key)) continue; server = serverListeners[key]; // in case the server is closed we won't close it again if (server._handle === null) { progress.done(); continue; } server.on('close', progress.done.bind(progress)); server.close(); } }); }; } // Fork a new worker cluster.fork = function(env) { // This can only be called from the master. assert(cluster.isMaster); // Make sure that the master has been initialized cluster.setupMaster(); return (new cluster.Worker(env)); }; // execute .disconnect on all workers and close handlers when done cluster.disconnect = function(callback) { // This can only be called from the master. assert(cluster.isMaster); // Close all TCP handlers when all workers are disconnected var workers = Object.keys(cluster.workers).length; var progress = new ProgressTracker(workers, function() { for (var key in serverHandlers) { serverHandlers[key].close(); delete serverHandlers[key]; } // call callback when done if (callback) callback(); }); // begin disconnecting all workers eachWorker(function(worker) { worker.once('disconnect', progress.done.bind(progress)); worker.disconnect(); }); process.nextTick(function() { // in case there weren't any workers progress.check(); }); }; // Internal function. Called from src/node.js when worker process starts. cluster._setupWorker = function() { // Get worker class var worker = cluster.worker = new Worker(); // we will terminate the worker // when the worker is disconnected from the parent accidentally process.once('disconnect', function() { if (worker.suicide !== true) { process.exit(0); } }); // Tell master that the worker is online worker.state = 'online'; sendInternalMessage(worker, { cmd: 'online' }); }; // Internal function. Called by net.js and dgram.js when attempting to bind a // TCP server or UDP socket. cluster._getServer = function(tcpSelf, address, port, addressType, fd, cb) { // This can only be called from a worker. assert(cluster.isWorker); // Store tcp instance for later use var key = [address, port, addressType, fd].join(':'); serverListeners[key] = tcpSelf; // Send a listening message to the master tcpSelf.once('listening', function() { cluster.worker.state = 'listening'; sendInternalMessage(cluster.worker, { cmd: 'listening', address: address, port: tcpSelf.address().port || port, addressType: addressType, fd: fd }); }); // Request the fd handler from the master process var message = { cmd: 'queryServer', address: address, port: port, addressType: addressType, fd: fd }; // The callback will be stored until the master has responded sendInternalMessage(cluster.worker, message, function(msg, handle) { cb(handle, msg && msg.error); }); }; // Copyright & License details are available under JXCORE_LICENSE file exports.DEFAULT_ENCODING = 'buffer'; try { var binding = process.binding('crypto'); var SecureContext = binding.SecureContext; var randomBytes = binding.randomBytes; var pseudoRandomBytes = binding.pseudoRandomBytes; var getCiphers = binding.getCiphers; var getHashes = binding.getHashes; var crypto = true; } catch (e) { var crypto = false; } var constants = process.binding('constants'); var stream = require('stream'); var util = require('util'); // This is here because many functions accepted binary strings without // any explicit encoding in older versions of node, and we don't want // to break them unnecessarily. function toBuf(str, encoding) { encoding = encoding || 'binary'; if (typeof str === 'string') { if (encoding === 'buffer') encoding = 'binary'; str = new Buffer(str, encoding); } return str; } var debug; if (process.env.NODE_DEBUG && /crypto/.test(process.env.NODE_DEBUG)) { debug = function (a) { console.error('CRYPTO:', a); }; } else { debug = function () { }; } var assert = require('assert'); var StringDecoder = require('string_decoder').StringDecoder; var CONTEXT_DEFAULT_OPTIONS = constants.SSL_OP_NO_SSLv2|constants.SSL_OP_NO_SSLv3|constants.SSL_OP_NO_TLSv1; function getSecureOptions(secureProtocol, secureOptions) { switch(secureProtocol) { case undefined: case 'SSLv2_method': case 'SSLv3_method': case 'TLSv1_method': case 'SSLv23_method': secureProtocol='SSLv23_method'; break; case 'SSLv2_server_method': case 'SSLv3_server_method': case 'TLSv1_server_method': case 'SSLv23_server_method': secureProtocol='SSLv23_server_method'; break; case 'SSLv2_client_method': case 'SSLv3_client_method': case 'TLSv1_client_method': case 'SSLv23_client_method': secureProtocol='SSLv23_client_method'; break; case 'TLSv1_1_method': case 'TLSv1_1_method': case 'TLSv1_1_server_method': case 'TLSv1_2_server_method': case 'TLSv1_2_client_method': case 'TLSv1_2_client_method': break; default: secureProtcol='SSLv23_method'; break; } if (secureOptions === undefined || isNaN(Number(secureOptions))) { secureOptions=CONTEXT_DEFAULT_OPTIONS; } else { secureOptions|=CONTEXT_DEFAULT_OPTIONS; } return secureOptions; } exports._getSecureOptions = getSecureOptions; function Credentials(secureProtocol, flags, context) { if (!(this instanceof Credentials)) { return new Credentials(secureProtocol, flags, context); } if (!crypto) { throw new Error('node.js not compiled with openssl crypto support.'); } if (context) { this.context = context; } else { this.context = new SecureContext(); if (secureProtocol) { this.context.init(secureProtocol); } else { this.context.init(); } } flags = getSecureOptions(secureProtocol, flags); this.context.setOptions(flags); } exports.Credentials = Credentials; exports.createCredentials = function(options, context) { if (!options) options = {}; var c = new Credentials(options.secureProtocol, options.secureOptions, context); if (context) return c; if (options.key) { if (options.passphrase) { c.context.setKey(options.key, options.passphrase); } else { c.context.setKey(options.key); } } if (options.cert) c.context.setCert(options.cert); if (options.ciphers) c.context.setCiphers(options.ciphers); if (options.ca) { if (Array.isArray(options.ca)) { for (var i = 0, len = options.ca.length; i < len; i++) { c.context.addCACert(options.ca[i]); } } else { c.context.addCACert(options.ca); } } else { c.context.addRootCerts(); } if (options.crl) { if (Array.isArray(options.crl)) { for (var i = 0, len = options.crl.length; i < len; i++) { c.context.addCRL(options.crl[i]); } } else { c.context.addCRL(options.crl); } } if (options.sessionIdContext) { c.context.setSessionIdContext(options.sessionIdContext); } if (options.pfx) { var pfx = options.pfx; var passphrase = options.passphrase; pfx = toBuf(pfx); if (passphrase) passphrase = toBuf(passphrase); if (passphrase) { c.context.loadPKCS12(pfx, passphrase); } else { c.context.loadPKCS12(pfx); } } if (options.pskServerCallback) { debug('a psk call back provider'); c.context.setPskServerCallback(options.pskServerCallback); } if (options.pskServerHint) { c.context.setPskHint(options.pskServerHint); } return c; }; function LazyTransform(options) { this._options = options; } util.inherits(LazyTransform, stream.Transform); [ '_readableState', '_writableState', '_transformState' ].forEach(function(prop, i, props) { Object.defineProperty(LazyTransform.prototype, prop, { get: function() { stream.Transform.call(this, this._options); this._writableState.decodeStrings = false; this._writableState.defaultEncoding = 'binary'; return this[prop]; }, set: function(val) { Object.defineProperty(this, prop, { value: val, enumerable: true, configurable: true, writable: true }); }, configurable: true, enumerable: true }); }); exports.createHash = exports.Hash = Hash; function Hash(algorithm, options) { if (!(this instanceof Hash)) return new Hash(algorithm, options); this._binding = new binding.Hash(algorithm); LazyTransform.call(this, options); } util.inherits(Hash, LazyTransform); Hash.prototype._transform = function(chunk, encoding, callback) { this._binding.update(chunk, encoding); callback(); }; Hash.prototype._flush = function(callback) { var encoding = this._readableState.encoding || 'buffer'; this.push(this._binding.digest(encoding), encoding); callback(); }; Hash.prototype.update = function(data, encoding) { encoding = encoding || exports.DEFAULT_ENCODING; if (encoding === 'buffer' && typeof data === 'string') encoding = 'binary'; this._binding.update(data, encoding); return this; }; Hash.prototype.digest = function(outputEncoding) { outputEncoding = outputEncoding || exports.DEFAULT_ENCODING; return this._binding.digest(outputEncoding); }; exports.createHmac = exports.Hmac = Hmac; function Hmac(hmac, key, options) { if (!(this instanceof Hmac)) return new Hmac(hmac, key, options); this._binding = new binding.Hmac(); this._binding.init(hmac, toBuf(key)); LazyTransform.call(this, options); } util.inherits(Hmac, LazyTransform); Hmac.prototype.update = Hash.prototype.update; Hmac.prototype.digest = Hash.prototype.digest; Hmac.prototype._flush = Hash.prototype._flush; Hmac.prototype._transform = Hash.prototype._transform; function getDecoder(decoder, encoding) { if (encoding === 'utf-8') encoding = 'utf8'; // Normalize encoding. decoder = decoder || new StringDecoder(encoding); assert(decoder.encoding === encoding, 'Cannot change encoding'); return decoder; } exports.createCipher = exports.Cipher = Cipher; function Cipher(cipher, password, options) { if (!(this instanceof Cipher)) return new Cipher(cipher, password, options); this._binding = new binding.Cipher; this._binding.init(cipher, toBuf(password)); this._decoder = null; LazyTransform.call(this, options); } util.inherits(Cipher, LazyTransform); Cipher.prototype._transform = function(chunk, encoding, callback) { this.push(this._binding.update(chunk, encoding)); callback(); }; Cipher.prototype._flush = function(callback) { try { this.push(this._binding.final()); } catch (e) { callback(e); return; } callback(); }; Cipher.prototype.update = function(data, inputEncoding, outputEncoding) { inputEncoding = inputEncoding || exports.DEFAULT_ENCODING; outputEncoding = outputEncoding || exports.DEFAULT_ENCODING; var ret = this._binding.update(data, inputEncoding); if (outputEncoding && outputEncoding !== 'buffer') { this._decoder = getDecoder(this._decoder, outputEncoding); ret = this._decoder.write(ret); } return ret; }; Cipher.prototype.final = function(outputEncoding) { outputEncoding = outputEncoding || exports.DEFAULT_ENCODING; var ret = this._binding.final(); if (outputEncoding && outputEncoding !== 'buffer') { this._decoder = getDecoder(this._decoder, outputEncoding); ret = this._decoder.end(ret); } return ret; }; Cipher.prototype.setAutoPadding = function(ap) { this._binding.setAutoPadding(ap); return this; }; exports.createCipheriv = exports.Cipheriv = Cipheriv; function Cipheriv(cipher, key, iv, options) { if (!(this instanceof Cipheriv)) return new Cipheriv(cipher, key, iv, options); this._binding = new binding.Cipher(); this._binding.initiv(cipher, toBuf(key), toBuf(iv)); this._decoder = null; LazyTransform.call(this, options); } util.inherits(Cipheriv, LazyTransform); Cipheriv.prototype._transform = Cipher.prototype._transform; Cipheriv.prototype._flush = Cipher.prototype._flush; Cipheriv.prototype.update = Cipher.prototype.update; Cipheriv.prototype.final = Cipher.prototype.final; Cipheriv.prototype.setAutoPadding = Cipher.prototype.setAutoPadding; exports.createDecipher = exports.Decipher = Decipher; function Decipher(cipher, password, options) { if (!(this instanceof Decipher)) return new Decipher(cipher, password, options); this._binding = new binding.Decipher; this._binding.init(cipher, toBuf(password)); this._decoder = null; LazyTransform.call(this, options); } util.inherits(Decipher, LazyTransform); Decipher.prototype._transform = Cipher.prototype._transform; Decipher.prototype._flush = Cipher.prototype._flush; Decipher.prototype.update = Cipher.prototype.update; Decipher.prototype.final = Cipher.prototype.final; Decipher.prototype.finaltol = Cipher.prototype.final; Decipher.prototype.setAutoPadding = Cipher.prototype.setAutoPadding; exports.createDecipheriv = exports.Decipheriv = Decipheriv; function Decipheriv(cipher, key, iv, options) { if (!(this instanceof Decipheriv)) return new Decipheriv(cipher, key, iv, options); this._binding = new binding.Decipher; this._binding.initiv(cipher, toBuf(key), toBuf(iv)); this._decoder = null; LazyTransform.call(this, options); } util.inherits(Decipheriv, LazyTransform); Decipheriv.prototype._transform = Cipher.prototype._transform; Decipheriv.prototype._flush = Cipher.prototype._flush; Decipheriv.prototype.update = Cipher.prototype.update; Decipheriv.prototype.final = Cipher.prototype.final; Decipheriv.prototype.finaltol = Cipher.prototype.final; Decipheriv.prototype.setAutoPadding = Cipher.prototype.setAutoPadding; exports.createSign = exports.Sign = Sign; function Sign(algorithm, options) { if (!(this instanceof Sign)) return new Sign(algorithm, options); this._binding = new binding.Sign(); this._binding.init(algorithm); stream.Writable.call(this, options); } util.inherits(Sign, stream.Writable); Sign.prototype._write = function(chunk, encoding, callback) { this._binding.update(chunk, encoding); callback(); }; Sign.prototype.update = Hash.prototype.update; Sign.prototype.sign = function(key, encoding) { encoding = encoding || exports.DEFAULT_ENCODING; var ret = this._binding.sign(toBuf(key)); if (encoding && encoding !== 'buffer') ret = ret.toString(encoding); return ret; }; exports.createVerify = exports.Verify = Verify; function Verify(algorithm, options) { if (!(this instanceof Verify)) return new Verify(algorithm, options); this._binding = new binding.Verify; this._binding.init(algorithm); stream.Writable.call(this, options); } util.inherits(Verify, stream.Writable); Verify.prototype._write = Sign.prototype._write; Verify.prototype.update = Sign.prototype.update; Verify.prototype.verify = function(object, signature, sigEncoding) { sigEncoding = sigEncoding || exports.DEFAULT_ENCODING; return this._binding.verify(toBuf(object), toBuf(signature, sigEncoding)); }; exports.publicEncrypt = function(options, buffer) { var key = options.key || options; var padding = options.padding || constants.RSA_PKCS1_OAEP_PADDING; return binding.publicEncrypt(toBuf(key), buffer, padding); }; exports.privateDecrypt = function(options, buffer) { var key = options.key || options; var passphrase = options.passphrase || null; var padding = options.padding || constants.RSA_PKCS1_OAEP_PADDING; return binding.privateDecrypt(toBuf(key), buffer, padding, passphrase); }; exports.createDiffieHellman = exports.DiffieHellman = DiffieHellman; function DiffieHellman(sizeOrKey, encoding) { if (!(this instanceof DiffieHellman)) return new DiffieHellman(sizeOrKey, encoding); if (!sizeOrKey) this._binding = new binding.DiffieHellman(); else { encoding = encoding || exports.DEFAULT_ENCODING; sizeOrKey = toBuf(sizeOrKey, encoding); this._binding = new binding.DiffieHellman(sizeOrKey); } } exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = DiffieHellmanGroup; function DiffieHellmanGroup(name) { if (!(this instanceof DiffieHellmanGroup)) return new DiffieHellmanGroup(name); this._binding = new binding.DiffieHellmanGroup(name); } DiffieHellmanGroup.prototype.generateKeys = DiffieHellman.prototype.generateKeys = dhGenerateKeys; function dhGenerateKeys(encoding) { var keys = this._binding.generateKeys(); encoding = encoding || exports.DEFAULT_ENCODING; if (encoding && encoding !== 'buffer') keys = keys.toString(encoding); return keys; } DiffieHellmanGroup.prototype.computeSecret = DiffieHellman.prototype.computeSecret = dhComputeSecret; function dhComputeSecret(key, inEnc, outEnc) { inEnc = inEnc || exports.DEFAULT_ENCODING; outEnc = outEnc || exports.DEFAULT_ENCODING; var ret = this._binding.computeSecret(toBuf(key, inEnc)); if (outEnc && outEnc !== 'buffer') ret = ret.toString(outEnc); return ret; } DiffieHellmanGroup.prototype.getPrime = DiffieHellman.prototype.getPrime = dhGetPrime; function dhGetPrime(encoding) { var prime = this._binding.getPrime(); encoding = encoding || exports.DEFAULT_ENCODING; if (encoding && encoding !== 'buffer') prime = prime.toString(encoding); return prime; } DiffieHellmanGroup.prototype.getGenerator = DiffieHellman.prototype.getGenerator = dhGetGenerator; function dhGetGenerator(encoding) { var generator = this._binding.getGenerator(); encoding = encoding || exports.DEFAULT_ENCODING; if (encoding && encoding !== 'buffer') generator = generator.toString(encoding); return generator; } DiffieHellmanGroup.prototype.getPublicKey = DiffieHellman.prototype.getPublicKey = dhGetPublicKey; function dhGetPublicKey(encoding) { var key = this._binding.getPublicKey(); encoding = encoding || exports.DEFAULT_ENCODING; if (encoding && encoding !== 'buffer') key = key.toString(encoding); return key; } DiffieHellmanGroup.prototype.getPrivateKey = DiffieHellman.prototype.getPrivateKey = dhGetPrivateKey; function dhGetPrivateKey(encoding) { var key = this._binding.getPrivateKey(); encoding = encoding || exports.DEFAULT_ENCODING; if (encoding && encoding !== 'buffer') key = key.toString(encoding); return key; } DiffieHellman.prototype.setPublicKey = function(key, encoding) { encoding = encoding || exports.DEFAULT_ENCODING; this._binding.setPublicKey(toBuf(key, encoding)); return this; }; DiffieHellman.prototype.setPrivateKey = function(key, encoding) { encoding = encoding || exports.DEFAULT_ENCODING; this._binding.setPrivateKey(toBuf(key, encoding)); return this; }; exports.pbkdf2 = function(password, salt, iterations, keylen, callback) { if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2'); return pbkdf2(password, salt, iterations, keylen, callback); }; exports.pbkdf2Sync = function(password, salt, iterations, keylen) { return pbkdf2(password, salt, iterations, keylen); }; function pbkdf2(password, salt, iterations, keylen, callback) { password = toBuf(password); salt = toBuf(salt); if (exports.DEFAULT_ENCODING === 'buffer') return binding.PBKDF2(password, salt, iterations, keylen, callback); // at this point, we need to handle encodings. var encoding = exports.DEFAULT_ENCODING; if (callback) { binding.PBKDF2(password, salt, iterations, keylen, function(er, ret) { if (ret) ret = ret.toString(encoding); callback(er, ret); }); } else { var ret = binding.PBKDF2(password, salt, iterations, keylen); return ret.toString(encoding); } } exports.randomBytes = randomBytes; exports.pseudoRandomBytes = pseudoRandomBytes; exports.rng = randomBytes; exports.prng = pseudoRandomBytes; exports.getCiphers = function() { return filterDuplicates(getCiphers.call(null, arguments)); }; exports.getHashes = function() { return filterDuplicates(getHashes.call(null, arguments)); }; function filterDuplicates(names) { // Drop all-caps names in favor of their lowercase aliases, // for example, 'sha1' instead of 'SHA1'. var ctx = {}; names.forEach(function(name) { var key = name; if (/^[0-9A-Z\-]+$/.test(key)) key = key.toLowerCase(); if (!ctx.hasOwnProperty(key) || ctx[key] < name) ctx[key] = name; }); return Object.getOwnPropertyNames(ctx).map(function(key) { return ctx[key]; }).sort(); } function ECDH(curve) { if (typeof curve !== 'string') throw new TypeError('curve should be a string'); this._binding = new binding.ECDH(curve); } exports.createECDH = function createECDH(curve) { return new ECDH(curve); }; ECDH.prototype.computeSecret = DiffieHellman.prototype.computeSecret; ECDH.prototype.setPrivateKey = DiffieHellman.prototype.setPrivateKey; ECDH.prototype.setPublicKey = DiffieHellman.prototype.setPublicKey; ECDH.prototype.getPrivateKey = DiffieHellman.prototype.getPrivateKey; ECDH.prototype.generateKeys = function generateKeys(encoding, format) { this._binding.generateKeys(); return this.getPublicKey(encoding, format); }; ECDH.prototype.getPublicKey = function getPublicKey(encoding, format) { var f; if (format) { if (typeof format === 'number') f = format; if (format === 'compressed') f = constants.POINT_CONVERSION_COMPRESSED; else if (format === 'hybrid') f = constants.POINT_CONVERSION_HYBRID; // Default else if (format === 'uncompressed') f = constants.POINT_CONVERSION_UNCOMPRESSED; else throw TypeError('Bad format: ' + format); } else { f = constants.POINT_CONVERSION_UNCOMPRESSED; } var key = this._binding.getPublicKey(f); encoding = encoding || exports.DEFAULT_ENCODING; if (encoding && encoding !== 'buffer') key = key.toString(encoding); return key; };// Copyright & License details are available under JXCORE_LICENSE file module.exports = process.binding('constants'); // Copyright & License details are available under JXCORE_LICENSE file var util = require('util'); var isHeadless = process.isEmbedded && (process.platform === 'android' || process.platform == 'winrt' || !process.hasStdFds); var $tw; if (isHeadless) { $tw = process.binding('jxutils_wrap'); } function Console(stdout, stderr) { if (!(this instanceof Console)) { return new Console(stdout, stderr); } if (!isHeadless) { if (!stdout || typeof stdout.write !== 'function') { throw new TypeError('Console expects a writable stream instance'); } } if (!stderr) { stderr = stdout; } var prop = { writable: true, enumerable: false, configurable: true }; prop.value = stdout; Object.defineProperty(this, '_stdout', prop); prop.value = stderr; Object.defineProperty(this, '_stderr', prop); prop.value = []; Object.defineProperty(this, '_times', prop); // bind the prototype functions to this Console instance Object.keys(Console.prototype).forEach(function(k) { this[k] = this[k].bind(this); }, this); } Console.prototype._log = function(msg) { if (!isHeadless) { this._stdout.write(msg); } else { $tw.print(msg); } }; Console.prototype.log = function() { var msg = util.format.apply(this, arguments) + '\n'; this._log(msg); }; Console.prototype.info = Console.prototype.log; Console.prototype.warn = function() { var msg = util.format.apply(this, arguments) + '\n'; if (!isHeadless) { this._stderr.write(msg); } else { $tw.print_err_warn(msg, false); } }; Console.prototype.error = function() { var msg = util.format.apply(this, arguments) + '\n'; if (!isHeadless) { this._stderr.write(msg); } else { $tw.print_err_warn(msg, true); } }; Console.prototype.dir = function(object, options) { var formattedTxt = util.inspect(object, util._extend({ customInspect: false }, options)) + '\n'; if (!isHeadless) { this._stdout.write(formattedTxt); } else { $tw.print(formattedTxt); } }; function findTimeWithLabel(times, label) { if (!Array.isArray(times)) { jxcore.utils.console.log('Console.time/timeEnd: times must be an Array', 'red'); return; } if (typeof label !== 'string') { jxcore.utils.console.log('Console.time/timeEnd: label must be a string', 'red'); return; } var found; times.some(function findTime(item) { if (item.label === label) { found = item; return true; } }); return found; } Console.prototype.time = function(label) { var timeEntry = findTimeWithLabel(this._times, label); var wallClockTime = Date.now(); if (!timeEntry) { this._times.push({ label: label, time: wallClockTime }); } else { timeEntry.time = wallClockTime; } }; Console.prototype.timeEnd = function(label) { var wallClockTimeEnd = Date.now(); var timeEntry = findTimeWithLabel(this._times, label); if (!timeEntry) { throw new Error('No such label: ' + label); } else { if (typeof timeEntry.time !== 'number') { jxcore.utils.console.log('Console.timeEnd: start time must be a number', 'red'); return; } var duration = wallClockTimeEnd - timeEntry.time; this.log('%s: %dms', label, duration); } }; Console.prototype.trace = function() { var err = new Error; err.name = 'Trace'; err.message = util.format.apply(this, arguments); Error.captureStackTrace(err, arguments.callee); if (process.versions.v8 || process.versions.ch) this.error(err.stack); else if (process.versions.sm) this.error(err.stack.toString()); else process .binding('jxutils_wrap') .print( 'console.trace couldn\'t identify the actual JavaScript engine. ' + 'Did you overwrite \'process.versions\' ?'); }; Console.prototype.assert = function(expression) { if (!expression) { var arr = Array.prototype.slice.call(arguments, 1); require('assert').ok(false, util.format.apply(this, arr)); } }; module.exports = new Console(process.stdout, process.stderr); module.exports.Console = Console; // Copyright & License details are available under JXCORE_LICENSE file var StringDecoder = require('string_decoder').StringDecoder; var EventEmitter = require('events').EventEmitter; var net = require('net'); var dgram = require('dgram'); var Process = process.binding('process_wrap').Process; var assert = require('assert'); var util = require('util'); var constants; var handleWraps = {}; function handleWrapGetter(name, callback) { var cons; Object.defineProperty(handleWraps, name, { get: function() { if (cons !== undefined) return cons; return cons = callback(); } }); } handleWrapGetter('Pipe', function() { return process.binding('pipe_wrap').Pipe; }); handleWrapGetter('TTY', function() { return process.binding('tty_wrap').TTY; }); handleWrapGetter('TCP', function() { return process.binding('tcp_wrap').TCP; }); handleWrapGetter('UDP', function() { return process.binding('udp_wrap').UDP; }); // constructors for lazy loading function createPipe(ipc) { return new handleWraps.Pipe(ipc); } function createSocket(pipe, readable) { var s = new net.Socket({ handle: pipe }); if (readable) { s.writable = false; s.readable = true; } else { s.writable = true; s.readable = false; } return s; } // this object contain function to convert TCP objects to native handle objects // and back again. var handleConversion = { 'net.Native': { simultaneousAccepts: true, send: function(message, handle) { return handle; }, got: function(message, handle, emit) { emit(handle); } }, 'net.Server': { simultaneousAccepts: true, send: function(message, server) { return server._handle; }, got: function(message, handle, emit) { var self = this; var server = new net.Server(); server.listen(handle, function() { emit(server); }); } }, 'net.Socket': { send: function(message, socket) { if (!socket._handle) return; // if the socket was created by net.Server if (socket.server) { // the slave should keep track of the socket message.key = socket.server._connectionKey; var firstTime = !this._channel.sockets.send[message.key]; var socketList = getSocketList('send', this, message.key); // the server should no longer expose a .connection property // and when asked to close it should query the socket status from // the slaves if (firstTime) socket.server._setupSlave(socketList); // Act like socket is detached socket.server._connections--; } // remove handle from socket object, it will be closed when the socket // will be sent var handle = socket._handle; handle.onread = function() {}; socket._handle = null; return handle; }, postSend: function(handle) { // Close the Socket handle after sending it if (handle) handle.close(); }, got: function(message, handle, emit) { var socket = new net.Socket({ handle: handle }); socket.readable = socket.writable = true; // if the socket was created by net.Server we will track the socket if (message.key) { // add socket to connections list var socketList = getSocketList('got', this, message.key); socketList.add({ socket: socket }); } emit(socket); } }, 'dgram.Native': { simultaneousAccepts: false, send: function(message, handle) { return handle; }, got: function(message, handle, emit) { emit(handle); } }, 'dgram.Socket': { simultaneousAccepts: false, send: function(message, socket) { message.dgramType = socket.type; return socket._handle; }, got: function(message, handle, emit) { var socket = new dgram.Socket(message.dgramType); socket.bind(handle, function() { emit(socket); }); } } }; // This object keep track of the socket there are sended function SocketListSend(slave, key) { EventEmitter.call(this); var self = this; this.key = key; this.slave = slave; } util.inherits(SocketListSend, EventEmitter); SocketListSend.prototype._request = function(msg, cmd, callback) { var self = this; if (!this.slave.connected) return onclose(); this.slave.send(msg); function onclose() { self.slave.removeListener('internalMessage', onreply); callback(new Error('Slave closed before reply')); }; function onreply(msg) { if (!(msg.cmd === cmd && msg.key === self.key)) return; self.slave.removeListener('disconnect', onclose); self.slave.removeListener('internalMessage', onreply); callback(null, msg); }; this.slave.once('disconnect', onclose); this.slave.on('internalMessage', onreply); }; SocketListSend.prototype.close = function close(callback) { this._request({ cmd: 'NODE_SOCKET_NOTIFY_CLOSE', key: this.key }, 'NODE_SOCKET_ALL_CLOSED', callback); }; SocketListSend.prototype.getConnections = function getConnections(callback) { this._request({ cmd: 'NODE_SOCKET_GET_COUNT', key: this.key }, 'NODE_SOCKET_COUNT', function(err, msg) { if (err) return callback(err); callback(null, msg.count); }); }; // This object keep track of the socket there are received function SocketListReceive(slave, key) { EventEmitter.call(this); var self = this; this.connections = 0; this.key = key; this.slave = slave; function onempty() { if (!self.slave.connected) return; self.slave.send({ cmd: 'NODE_SOCKET_ALL_CLOSED', key: self.key }); } this.slave.on('internalMessage', function(msg) { if (msg.key !== self.key) return; if (msg.cmd === 'NODE_SOCKET_NOTIFY_CLOSE') { // Already empty if (self.connections === 0) return onempty(); // Wait for sockets to get closed self.once('empty', onempty); } else if (msg.cmd === 'NODE_SOCKET_GET_COUNT') { if (!self.slave.connected) return; self.slave.send({ cmd: 'NODE_SOCKET_COUNT', key: self.key, count: self.connections }); } }); } util.inherits(SocketListReceive, EventEmitter); SocketListReceive.prototype.add = function(obj) { var self = this; this.connections++; // Notify previous owner of socket about its state change obj.socket.once('close', function() { self.connections--; if (self.connections === 0) self.emit('empty'); }); }; function getSocketList(type, slave, key) { var sockets = slave._channel.sockets[type]; var socketList = sockets[key]; if (!socketList) { var Construct = type === 'send' ? SocketListSend : SocketListReceive; socketList = sockets[key] = new Construct(slave, key); } return socketList; } var INTERNAL_PREFIX = 'NODE_'; function handleMessage(target, message, handle) { var eventName = 'message'; if (message !== null && typeof message === 'object' && typeof message.cmd === 'string' && message.cmd.length > INTERNAL_PREFIX.length && message.cmd.slice(0, INTERNAL_PREFIX.length) === INTERNAL_PREFIX) { eventName = 'internalMessage'; } target.emit(eventName, message, handle); } function setupChannel(target, channel) { target._channel = channel; target._handleQueue = null; var decoder = new StringDecoder('utf8'); var jsonBuffer = ''; channel.buffering = false; channel.onread = function(pool, offset, length, recvHandle) { if (pool) { jsonBuffer += decoder.write(pool.slice(offset, offset + length)); var i, start = 0; // Linebreak is used as a message end sign while ((i = jsonBuffer.indexOf('\n', start)) >= 0) { var json = jsonBuffer.slice(start, i); var message = JSON.parse(json); // There will be at most one NODE_HANDLE message in every chunk we // read because SCM_RIGHTS messages don't get coalesced. Make sure // that we deliver the handle with the right message however. if (message && message.cmd === 'NODE_HANDLE') handleMessage(target, message, recvHandle); else handleMessage(target, message, undefined); start = i + 1; } jsonBuffer = jsonBuffer.slice(start); this.buffering = jsonBuffer.length !== 0; } else { this.buffering = false; target.disconnect(); channel.onread = nop; channel.close(); maybeClose(target); } }; // object where socket lists will live channel.sockets = { got: {}, send: {} }; // handlers will go through this target.on('internalMessage', function(message, handle) { // Once acknowledged - continue sending handles. if (message.cmd === 'NODE_HANDLE_ACK') { assert(Array.isArray(target._handleQueue)); var queue = target._handleQueue; target._handleQueue = null; queue.forEach(function(args) { target.send(args.message, args.handle); }); return; } if (message.cmd !== 'NODE_HANDLE') return; // Acknowledge handle receival. target.send({ cmd: 'NODE_HANDLE_ACK' }); var obj = handleConversion[message.type]; // Update simultaneous accepts on Windows if (process.platform === 'win32') { handle._simultaneousAccepts = false; net._setSimultaneousAccepts(handle); } // Convert handle object obj.got.call(this, message, handle, function(handle) { handleMessage(target, message.msg, handle); }); }); target.send = function(message, handle) { if (typeof message === 'undefined') { throw new TypeError('message cannot be undefined'); } if (!this.connected) { this.emit('error', new Error('channel closed')); return; } // package messages with a handle object if (handle) { // this message will be handled by an internalMessage event handler message = { cmd: 'NODE_HANDLE', type: null, msg: message }; if (handle instanceof net.Socket) { message.type = 'net.Socket'; } else if (handle instanceof net.Server) { message.type = 'net.Server'; } else if (handle instanceof process.binding('tcp_wrap').TCP || handle instanceof process.binding('pipe_wrap').Pipe) { message.type = 'net.Native'; } else if (handle instanceof dgram.Socket) { message.type = 'dgram.Socket'; } else if (handle instanceof process.binding('udp_wrap').UDP) { message.type = 'dgram.Native'; } else { throw new TypeError("This handle type can't be sent"); } // Queue-up message and handle if we haven't received ACK yet. if (this._handleQueue && !(message && message.cmd === 'NODE_HANDLE_ACK')) { this._handleQueue.push({ message: message.msg, handle: handle }); return; } var obj = handleConversion[message.type]; // convert TCP object to native handle object handle = obj.send.apply(target, arguments); // If handle was sent twice, or it is impossible to get native handle // out of it - just send a text without the handle. if (!handle) message = message.msg; // Update simultaneous accepts on Windows if (obj.simultaneousAccepts) { net._setSimultaneousAccepts(handle); } } else if (this._handleQueue && !(message && message.cmd === 'NODE_HANDLE_ACK')) { // Queue request anyway to avoid out-of-order messages. this._handleQueue.push({ message: message, handle: null }); return; } var string = JSON.stringify(message) + '\n'; var writeReq = channel.writeUtf8String(string, handle); if (!writeReq) { var er = errnoException(process._errno, 'write', 'cannot write to IPC channel.'); this.emit('error', er); return; } else if (handle && !this._handleQueue) { this._handleQueue = []; } if (obj && obj.postSend) { writeReq.oncomplete = obj.postSend.bind(null, handle); } else { writeReq.oncomplete = nop; } /* If the master is > 2 read() calls behind, please stop sending. */ return channel.writeQueueSize < (65536 * 2); }; target.connected = true; target.disconnect = function() { if (!this.connected) { this.emit('error', new Error('IPC channel is already disconnected')); return; } // do not allow messages to be written this.connected = false; this._channel = null; var fired = false; function finish() { if (fired) return; fired = true; channel.close(); target.emit('disconnect'); } // If a message is being read, then wait for it to complete. if (channel.buffering) { this.once('message', finish); this.once('internalMessage', finish); return; } finish(); }; channel.readStart(); } function nop() { } exports.fork = function(modulePath /* , args, options */) { // Get options and args arguments. var options, args, execArgv; if (Array.isArray(arguments[1])) { args = arguments[1]; options = util._extend({}, arguments[2]); } else if (arguments[1] && typeof arguments[1] !== 'object') { throw new TypeError('Incorrect value of args option'); } else { args = []; options = util._extend({}, arguments[1]); } // for native packages fork() can work without problem if modulePath is not // given (it just forks itself, which is used by cluster.fork() ) if (process.isPackaged && modulePath) { // but if modulePath is given, user expects this modulePath to be forked // and that case we don't support yet if (!options || !options.execPath) throw new Error( 'Native packages cannot fork specific modules. ' + 'If you have jx binary installed, you may provide it with ' + '`options.execPath`.'); } // Prepare arguments for fork: execArgv = options.execArgv || process.execArgv; args = execArgv.concat(modulePath ? [modulePath] : [], args); // Leave stdin open for the IPC channel. stdout and stderr should be the // same as the parent's if silent isn't set. options.stdio = options.silent ? ['pipe', 'pipe', 'pipe', 'ipc'] : [0, 1, 2, 'ipc']; options.execPath = options.execPath || process.execPath; return spawn(options.execPath, args, options); }; exports._forkChild = function(fd) { // preload tcp_wrap since we may receive a message immediately process.binding('tcp_wrap'); var p = createPipe(true); p.open(fd); p.unref(); setupChannel(process, p); var refs = 0; process.on('newListener', function(name) { if (name !== 'message' && name !== 'disconnect') return; if (++refs === 1) p.ref(); }); process.on('removeListener', function(name) { if (name !== 'message' && name !== 'disconnect') return; if (--refs === 0) p.unref(); }); }; exports.exec = function(command /* , options, callback */) { var file, args, options, callback; if (typeof arguments[1] === 'function') { options = undefined; callback = arguments[1]; } else { options = arguments[1]; callback = arguments[2]; } if (process.platform === 'win32') { file = 'cmd.exe'; args = ['/s', '/c', '"' + command + '"']; // Make a shallow copy before patching so we don't clobber the user's // options object. options = util._extend({}, options); options.windowsVerbatimArguments = true; } else { file = '/bin/sh'; args = ['-c', command]; if (process.platform === 'android') { var fs = require('fs'); if (!fs.existsSync(file)) file = '/system/bin/sh'; if (!fs.existsSync(file)) throw new Error('Could not find shell.'); } } return exports.execFile(file, args, options, callback); }; exports.execFile = function(file /* args, options, callback */) { var args = [], optionArg, callback; var options = { encoding: 'utf8', timeout: 0, maxBuffer: 200 * 1024, killSignal: 'SIGTERM', cwd: null, env: null }; // Parse the optional positional parameters. var pos = 1; if (pos < arguments.length && Array.isArray(arguments[pos])) { args = arguments[pos++]; } else if (pos < arguments.length && arguments[pos] == null) { pos++; } if (pos < arguments.length && typeof arguments[pos] === 'object') { options = util._extend(options, arguments[pos++]); } else if (pos < arguments.length && arguments[pos] == null) { pos++; } if (pos < arguments.length && typeof arguments[pos] === 'function') { callback = arguments[pos++]; } if (pos === 1 && arguments.length > 1) { throw new TypeError('Incorrect value of args option'); } var child = spawn(file, args, { cwd: options.cwd, env: options.env, windowsVerbatimArguments: !!options.windowsVerbatimArguments }); var stdout = ''; var stderr = ''; var killed = false; var exited = false; var timeoutId; var err; function exithandler(code, signal) { if (exited) return; exited = true; if (timeoutId) { clearTimeout(timeoutId); timeoutId = null; } if (!callback) return; if (err) { callback(err, stdout, stderr); } else if (code === 0 && signal === null) { callback(null, stdout, stderr); } else { var e = new Error('Command failed: ' + stderr); e.killed = child.killed || killed; e.code = code; e.signal = signal; callback(e, stdout, stderr); } } function errorhandler(e) { err = e; child.stdout.destroy(); child.stderr.destroy(); exithandler(); } function kill() { child.stdout.destroy(); child.stderr.destroy(); killed = true; try { child.kill(options.killSignal); } catch (e) { err = e; exithandler(); } } if (options.timeout > 0) { timeoutId = setTimeout(function() { kill(); timeoutId = null; }, options.timeout); } child.stdout.setEncoding(options.encoding); child.stderr.setEncoding(options.encoding); child.stdout.addListener('data', function(chunk) { stdout += chunk; if (stdout.length > options.maxBuffer) { err = new Error('stdout maxBuffer exceeded.'); kill(); } }); child.stderr.addListener('data', function(chunk) { stderr += chunk; if (stderr.length > options.maxBuffer) { err = new Error('stderr maxBuffer exceeded.'); kill(); } }); child.addListener('close', exithandler); child.addListener('error', errorhandler); return child; }; var spawn = exports.spawn = function(file /* , args, options */) { var args, options; if (Array.isArray(arguments[1])) { args = arguments[1].slice(0); options = arguments[2]; } else if (arguments[1] && typeof arguments[1] !== 'object') { throw new TypeError('Incorrect value of args option'); } else { args = []; options = arguments[1]; } args.unshift(file); var env = (options && options.env ? options.env : null) || process.env; var envPairs = []; for (var key in env) { if (typeof env.hasOwnProperty !== 'function' || env.hasOwnProperty(key) || env.__proto__[key]) envPairs.push(key + '=' + env[key]); } var child = new ChildProcess(); if (options && options.customFds && !options.stdio) { options.stdio = options.customFds.map(function(fd) { return fd === -1 ? 'pipe' : fd; }); } child.spawn({ file: file, args: args, cwd: options ? options.cwd : null, windowsVerbatimArguments: !!(options && options.windowsVerbatimArguments), detached: !!(options && options.detached), envPairs: envPairs, stdio: options ? options.stdio : null, uid: options ? options.uid : null, gid: options ? options.gid : null }); return child; }; function maybeClose(subprocess) { subprocess._closesGot++; if (subprocess._closesGot == subprocess._closesNeeded) { subprocess.emit('close', subprocess.exitCode, subprocess.signalCode); } } function ChildProcess() { EventEmitter.call(this); // Initialize TCPWrap and PipeWrap process.binding('tcp_wrap'); process.binding('pipe_wrap'); var self = this; this._closesNeeded = 1; this._closesGot = 0; this.connected = false; this.signalCode = null; this.exitCode = null; this.killed = false; this._handle = new Process(); this._handle.owner = this; this._handle.onexit = function(exitCode, signalCode) { // // follow 0.4.x behaviour: // // - normally terminated processes don't touch this.signalCode // - signaled processes don't touch this.exitCode // // new in 0.9.x: // // - spawn failures are reported with exitCode == -1 // var err = (exitCode == -1) ? errnoException(process._errno, 'spawn') : null; if (signalCode) { self.signalCode = signalCode; } else { self.exitCode = exitCode; } if (self.stdin) { self.stdin.destroy(); } self._handle.close(); self._handle = null; if (exitCode == -1) { self.emit('error', err); } else { self.emit('exit', self.exitCode, self.signalCode); } // if any of the stdio streams have not been touched, // then pull all the data through so that it can get the // eof and emit a 'close' event. // Do it on nextTick so that the user has one last chance // to consume the output, if for example they only want to // start reading the data once the process exits. process.nextTick(function() { flushStdio(self); }); maybeClose(self); }; } util.inherits(ChildProcess, EventEmitter); function flushStdio(subprocess) { subprocess.stdio.forEach(function(stream, fd, stdio) { if (!stream || !stream.readable || stream._consuming || stream._readableState.flowing) return; stream.resume(); }); } function getHandleWrapType(stream) { if (stream instanceof handleWraps.Pipe) return 'pipe'; if (stream instanceof handleWraps.TTY) return 'tty'; if (stream instanceof handleWraps.TCP) return 'tcp'; if (stream instanceof handleWraps.UDP) return 'udp'; return false; } ChildProcess.prototype.spawn = function(options) { var self = this, ipc, ipcFd, // If no `stdio` option was given - use default stdio = options.stdio || 'pipe'; // Replace shortcut with an array if (typeof stdio === 'string') { switch (stdio) { case 'ignore': stdio = ['ignore', 'ignore', 'ignore']; break; case 'pipe': stdio = ['pipe', 'pipe', 'pipe']; break; case 'inherit': stdio = [0, 1, 2]; break; default: throw new TypeError('Incorrect value of stdio option: ' + stdio); } } else if (!Array.isArray(stdio)) { throw new TypeError('Incorrect value of stdio option: ' + stdio); } // At least 3 stdio will be created // Don't concat() a new Array() because it would be sparse, and // stdio.reduce() would skip the sparse elements of stdio. // See http://stackoverflow.com/a/5501711/3561 while (stdio.length < 3) stdio.push(undefined); // Translate stdio into C++-readable form // (i.e. PipeWraps or fds) stdio = stdio.reduce(function(acc, stdio, i) { function cleanup() { acc.filter(function(stdio) { return stdio.type === 'pipe' || stdio.type === 'ipc'; }).forEach(function(stdio) { stdio.handle.close(); }); } // Defaults if (stdio === undefined || stdio === null) { stdio = i < 3 ? 'pipe' : 'ignore'; } if (stdio === 'ignore') { acc.push({ type: 'ignore' }); } else if (stdio === 'pipe' || typeof stdio === 'number' && stdio < 0) { acc.push({ type: 'pipe', handle: createPipe() }); } else if (stdio === 'ipc') { if (ipc !== undefined) { // Cleanup previously created pipes cleanup(); throw new Error('Child process can have only one IPC pipe'); } ipc = createPipe(true); ipcFd = i; acc.push({ type: 'pipe', handle: ipc, ipc: true }); } else if (typeof stdio === 'number' || typeof stdio.fd === 'number') { acc.push({ type: 'fd', fd: stdio.fd || stdio }); } else if (getHandleWrapType(stdio) || getHandleWrapType(stdio.handle) || getHandleWrapType(stdio._handle)) { var handle = getHandleWrapType(stdio) ? stdio : getHandleWrapType(stdio.handle) ? stdio.handle : stdio._handle; acc.push({ type: 'wrap', wrapType: getHandleWrapType(handle), handle: handle }); } else { // Cleanup cleanup(); throw new TypeError('Incorrect value for stdio stream: ' + stdio); } return acc; }, []); options.stdio = stdio; if (ipc !== undefined) { // Let child process know about opened IPC channel options.envPairs = options.envPairs || []; options.envPairs.push('NODE_CHANNEL_FD=' + ipcFd); } var r = this._handle.spawn(options); if (r) { // Close all opened fds on error stdio.forEach(function(stdio) { if (stdio.type === 'pipe') { stdio.handle.close(); } }); this._handle.close(); this._handle = null; throw errnoException(process._errno, 'spawn'); } this.pid = this._handle.pid; stdio.forEach(function(stdio, i) { if (stdio.type === 'ignore') return; if (stdio.ipc) { self._closesNeeded++; return; } if (stdio.handle) { // when i === 0 - we're dealing with stdin // (which is the only one writable pipe) stdio.socket = createSocket(self.pid !== 0 ? stdio.handle : null, i > 0); if (i > 0 && self.pid !== 0) { self._closesNeeded++; stdio.socket.on('close', function() { maybeClose(self); }); } } }); this.stdin = stdio.length >= 1 && stdio[0].socket !== undefined ? stdio[0].socket : null; this.stdout = stdio.length >= 2 && stdio[1].socket !== undefined ? stdio[1].socket : null; this.stderr = stdio.length >= 3 && stdio[2].socket !== undefined ? stdio[2].socket : null; this.stdio = stdio.map(function(stdio) { return stdio.socket === undefined ? null : stdio.socket; }); // Add .send() method and start listening for IPC data if (ipc !== undefined) setupChannel(this, ipc); return r; }; function errnoException(errorno, syscall, errmsg) { // TODO make this more compatible with ErrnoException from src/node.cc // Once all of Node is using this function the ErrnoException from // src/node.cc should be removed. var message = syscall + ' ' + errorno; if (errmsg) { message += ' - ' + errmsg; } var e = new Error(message); e.errno = e.code = errorno; e.syscall = syscall; return e; } ChildProcess.prototype.kill = function(sig) { var signal; if (!constants) { constants = process.binding('constants'); } if (sig === 0) { signal = 0; } else if (!sig) { signal = constants['SIGTERM']; } else { signal = constants[sig]; } if (signal === undefined) { throw new Error('Unknown signal: ' + sig); } if (this._handle) { var r = this._handle.kill(signal); if (r == 0) { /* Success. */ this.killed = true; return true; } else if (process._errno == 'ESRCH') { /* Already dead. */ } else if (process._errno == 'EINVAL' || process._errno == 'ENOSYS') { /* The underlying platform doesn't support this signal. */ throw errnoException(process._errno, 'kill'); } else { /* Other error, almost certainly EPERM. */ this.emit('error', errnoException(process._errno, 'kill')); } } /* Kill didn't succeed. */ return false; }; ChildProcess.prototype.ref = function() { if (this._handle) this._handle.ref(); }; ChildProcess.prototype.unref = function() { if (this._handle) this._handle.unref(); }; // Copyright & License details are available under JXCORE_LICENSE file var SlowBuffer = process.binding('buffer').SlowBuffer; var assert = require('assert'); exports.INSPECT_MAX_BYTES = 50; // Make SlowBuffer inherit from Buffer. // This is an exception to the rule that __proto__ is not allowed in core. SlowBuffer.prototype.__proto__ = Buffer.prototype; function clamp(index, len, defaultValue) { if (typeof index !== 'number') return defaultValue; index = ~~index; // Coerce to integer. if (index >= len) return len; if (index >= 0) return index; index += len; if (index >= 0) return index; return 0; } function toHex(n) { if (n < 16) return '0' + n.toString(16); return n.toString(16); } SlowBuffer.prototype.toString = function(encoding, start, end) { encoding = String(encoding || 'utf8').toLowerCase(); start = +start || 0; if (typeof end !== 'number') end = this.length; // Fastpath empty strings if (+end == start) { return ''; } switch (encoding) { case 'hex': return this.hexSlice(start, end); case 'utf8': case 'utf-8': return this.utf8Slice(start, end); case 'ascii': return this.asciiSlice(start, end); case 'binary': return this.binarySlice(start, end); case 'base64': return this.base64Slice(start, end); case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return this.ucs2Slice(start, end); default: throw new TypeError('Unknown encoding: ' + encoding); } }; SlowBuffer.prototype.write = function(string, offset, length, encoding) { // Support both (string, offset, length, encoding) // and the legacy (string, encoding, offset, length) if (isFinite(offset)) { if (!isFinite(length)) { encoding = length; length = undefined; } } else { // legacy var swap = encoding; encoding = offset; offset = length; length = swap; } offset = +offset || 0; var remaining = this.length - offset; if (!length) { length = remaining; } else { length = +length; if (length > remaining) { length = remaining; } } encoding = String(encoding || 'utf8').toLowerCase(); switch (encoding) { case 'hex': return this.hexWrite(string, offset, length); case 'utf8': case 'utf-8': return this.utf8Write(string, offset, length); case 'ascii': return this.asciiWrite(string, offset, length); case 'binary': return this.binaryWrite(string, offset, length); case 'base64': return this.base64Write(string, offset, length); case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return this.ucs2Write(string, offset, length); default: throw new TypeError('Unknown encoding: ' + encoding); } }; // slice(start, end) SlowBuffer.prototype.slice = function(start, end) { var len = this.length; start = clamp(start, len, 0); end = clamp(end, len, len); return new Buffer(this, end - start, start); }; var zeroBuffer = new SlowBuffer(0); // Buffer function Buffer(subject, encoding, offset) { if (!(this instanceof Buffer)) { return new Buffer(subject, encoding, offset); } var type; // Are we slicing? if (typeof offset === 'number') { if (!Buffer.isBuffer(subject)) { throw new TypeError('First argument must be a Buffer when slicing'); } this.length = +encoding > 0 ? Math.ceil(encoding) : 0; this.parent = subject.parent ? subject.parent : subject; this.offset = offset; } else { // Find the length switch (type = typeof subject) { case 'number': this.length = +subject > 0 ? Math.ceil(subject) : 0; break; case 'string': this.length = Buffer.byteLength(subject, encoding); break; case 'object': // Assume object is array-ish this.length = +subject.length > 0 ? Math.ceil(subject.length) : 0; break; default: throw new TypeError('First argument needs to be a number, ' + 'array or string.'); } if (this.length > Buffer.poolSize) { // Big buffer, just alloc one. this.parent = new SlowBuffer(this.length); this.offset = 0; } else if (this.length > 0) { // Small buffer. if (!pool || pool.length - pool.used < this.length) allocPool(); this.parent = pool; this.offset = pool.used; // Align on 8 byte boundary to avoid alignment issues on ARM. pool.used = (pool.used + this.length + 7) & ~7; } else { // Zero-length buffer this.parent = zeroBuffer; this.offset = 0; } // optimize by branching logic for new allocations if (typeof subject !== 'number') { if (type === 'string') { // We are a string this.length = this.write(subject, 0, encoding); // if subject is buffer then use built-in copy method } else if (Buffer.isBuffer(subject)) { if (subject.parent) subject.parent.copy(this.parent, this.offset, subject.offset, this.length + subject.offset); else subject.copy(this.parent, this.offset, 0, this.length); } else if (isArrayIsh(subject)) { for (var i = 0, ln = this.length; i < ln; i++) this.parent[i + this.offset] = subject[i]; } } } SlowBuffer.makeFastBuffer(this.parent, this, this.offset, this.length); } function isArrayIsh(subject) { return Array.isArray(subject) || subject && typeof subject === 'object' && typeof subject.length === 'number'; } exports.SlowBuffer = SlowBuffer; exports.Buffer = Buffer; Buffer.isEncoding = function(encoding) { switch (encoding && encoding.toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; default: return false; } }; Buffer.poolSize = 8 * 1024; var pool; function allocPool() { pool = new SlowBuffer(Buffer.poolSize); pool.used = 0; } // Static methods Buffer.isBuffer = function isBuffer(b) { return b instanceof Buffer; }; Buffer.compare = function compare(a, b) { if (!(a instanceof Buffer) || !(b instanceof Buffer)) { throw new TypeError('Arguments must be Buffers'); } if (a === b) { return 0; } return SlowBuffer.compare(a, b); }; Buffer.prototype.indexOf = function indexOf(val, byteOffset) { if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff; else if (byteOffset < -0x80000000) byteOffset = -0x80000000; byteOffset >>= 0; if (typeof val === 'string') return SlowBuffer.indexOfString(this, val, byteOffset); if (val instanceof Buffer) return SlowBuffer.indexOfBuffer(this, val, byteOffset); if (typeof val === 'number') return SlowBuffer.indexOfNumber(this, val, byteOffset); throw new TypeError('val must be string, number or Buffer'); }; // Inspect Buffer.prototype.inspect = function inspect() { var out = new Array(), len = this.length, name = this.constructor.name; for (var i = 0; i < len; i++) { out[i] = toHex(this[i]); if (i == exports.INSPECT_MAX_BYTES) { out[i + 1] = '...'; break; } } return '<' + name + ' ' + out.join(' ') + '>'; }; Buffer.prototype.compare = function compare(b) { if (!(b instanceof Buffer)) throw new TypeError('Argument must be a Buffer'); if (this === b) return 0; return SlowBuffer.compare(this, b); }; Buffer.prototype.get = function get(offset) { if (offset < 0 || offset >= this.length) throw new RangeError('offset is out of bounds'); return this.parent[this.offset + offset]; }; Buffer.prototype.set = function set(offset, v) { if (offset < 0 || offset >= this.length) throw new RangeError('offset is out of bounds'); return this.parent[this.offset + offset] = v; }; // write(string, offset = 0, length = buffer.length-offset, encoding = 'utf8') Buffer.prototype.write = function(string, offset, length, encoding) { // Support both (string, offset, length, encoding) // and the legacy (string, encoding, offset, length) if (global.isFinite(offset)) { if (!isFinite(length)) { encoding = length; length = undefined; } } else { // legacy var swap = encoding; encoding = offset; offset = length; length = swap; } offset = +offset || 0; var remaining = this.length - offset; if (!length) { length = remaining; } else { length = +length; if (length > remaining) { length = remaining; } } encoding = String(encoding || 'utf8').toLowerCase(); if (string.length > 0 && (length < 0 || offset < 0)) throw new RangeError('attempt to write beyond buffer bounds'); var ret; switch (encoding) { case 'hex': ret = this.parent.hexWrite(string, this.offset + offset, length); break; case 'utf8': case 'utf-8': ret = this.parent.utf8Write(string, this.offset + offset, length); break; case 'ascii': ret = this.parent.asciiWrite(string, this.offset + offset, length); break; case 'binary': ret = this.parent.binaryWrite(string, this.offset + offset, length); break; case 'base64': // Warning: maxLength not taken into account in base64Write ret = this.parent.base64Write(string, this.offset + offset, length); break; case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': ret = this.parent.ucs2Write(string, this.offset + offset, length); break; default: throw new TypeError('Unknown encoding: ' + encoding); } Buffer._charsWritten = SlowBuffer._charsWritten; return ret; }; Buffer.prototype.toJSON = function() { return Array.prototype.slice.call(this, 0); }; // toString(encoding, start=0, end=buffer.length) Buffer.prototype.toString = function(encoding, start, end) { encoding = String(encoding || 'utf8').toLowerCase(); if (typeof start !== 'number' || start < 0) { start = 0; } else if (start > this.length) { start = this.length; } if (typeof end !== 'number' || end > this.length) { end = this.length; } else if (end < 0) { end = 0; } start = start + this.offset; end = end + this.offset; switch (encoding) { case 'hex': return this.parent.hexSlice(start, end); case 'utf8': case 'utf-8': return this.parent.utf8Slice(start, end); case 'ascii': return this.parent.asciiSlice(start, end); case 'binary': return this.parent.binarySlice(start, end); case 'base64': return this.parent.base64Slice(start, end); case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return this.parent.ucs2Slice(start, end); default: throw new TypeError('Unknown encoding: ' + encoding); } }; // byteLength Buffer.byteLength = function(str, enc) { if (!enc || enc == 'utf8') { return SlowBuffer.Utf8Length(str, enc); } var ret; str = str + ''; switch (enc) { case 'ascii': case 'binary': case 'raw': ret = str.length; break; case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': ret = str.length * 2; break; case 'hex': ret = str.length >>> 1; break; default: ret = SlowBuffer.byteLength(str, enc); } return ret; }; // fill(value, start=0, end=buffer.length) Buffer.prototype.fill = function fill(value, start, end) { value || (value = 0); start || (start = 0); end || (end = this.length); if (typeof value === 'string') { value = value.charCodeAt(0); } if (typeof value !== 'number' || isNaN(value)) { throw new TypeError('value is not a number'); } if (end < start) throw new RangeError('end < start'); // Fill 0 bytes; we're done if (end === start) return 0; if (this.length == 0) return 0; if (start < 0 || start >= this.length) { throw new RangeError('start out of bounds'); } if (end < 0 || end > this.length) { throw new RangeError('end out of bounds'); } return this.parent.fill(value, start + this.offset, end + this.offset); }; Buffer.concat = function(list, length) { if (!Array.isArray(list)) { throw new TypeError('Usage: Buffer.concat(list, [length])'); } var ln = list.length; if (ln === 0) { return new Buffer(0); } else if (ln === 1) { return list[0]; } if (typeof length !== 'number') { length = 0; for (var i = 0; i < ln; i++) { var buf = list[i]; length += buf.length; } } var buffer = new Buffer(length); var pos = 0; for (var i = 0; i < ln; i++) { var buf = list[i]; buf.copy(buffer, pos); pos += buf.length; } return buffer; }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function(target, target_start, start, end) { // set undefined/NaN or out of bounds values equal to their default if (!(target_start >= 0)) target_start = 0; if (!(start >= 0)) start = 0; if (!(end < this.length)) end = this.length; // Copy 0 bytes; we're done if (end === start || target.length === 0 || this.length === 0 || start > this.length) return 0; if (end < start) throw new RangeError('sourceEnd < sourceStart'); if (target_start >= target.length) throw new RangeError('targetStart out of bounds'); if (target.length - target_start < end - start) end = target.length - target_start + start; return this.parent.copy(target.parent || target, target_start + (target.offset || 0), start + this.offset, end + this.offset); }; // slice(start, end) Buffer.prototype.slice = function(start, end) { var len = this.length; start = clamp(start, len, 0); end = clamp(end, len, len); return new Buffer(this.parent, end - start, start + this.offset); }; // Legacy methods for backwards compatibility. Buffer.prototype.utf8Slice = function(start, end) { return this.toString('utf8', start, end); }; Buffer.prototype.binarySlice = function(start, end) { return this.toString('binary', start, end); }; Buffer.prototype.asciiSlice = function(start, end) { return this.toString('ascii', start, end); }; Buffer.prototype.utf8Write = function(string, offset) { return this.write(string, offset, 'utf8'); }; Buffer.prototype.binaryWrite = function(string, offset) { return this.write(string, offset, 'binary'); }; Buffer.prototype.asciiWrite = function(string, offset) { return this.write(string, offset, 'ascii'); }; /* * Need to make sure that buffer isn't trying to write out of bounds. * This check is far too slow internally for fast buffers. */ function checkOffset(offset, ext, length) { if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint'); if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); } Buffer.prototype.readUInt8 = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length); return this[offset]; }; Buffer.prototype.readUInt16LE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); return this[offset] | (this[offset + 1] << 8); }; Buffer.prototype.readUInt16BE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); return (this[offset] << 8) | this[offset + 1]; }; Buffer.prototype.readUInt32LE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return ((this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16)) + (this[offset + 3] * 0x1000000); }; Buffer.prototype.readUInt32BE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3]); }; Buffer.prototype.readInt8 = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length); if (!(this[offset] & 0x80)) return (this[offset]); return ((0xff - this[offset] + 1) * -1); }; Buffer.prototype.readInt16LE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); var val = this[offset] | (this[offset + 1] << 8); return (val & 0x8000) ? val | 0xFFFF0000 : val; }; Buffer.prototype.readInt16BE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); var val = this[offset + 1] | (this[offset] << 8); return (val & 0x8000) ? val | 0xFFFF0000 : val; }; Buffer.prototype.readInt32LE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return (this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16) | (this[offset + 3] << 24); }; Buffer.prototype.readInt32BE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return (this[offset] << 24) | (this[offset + 1] << 16) | (this[offset + 2] << 8) | (this[offset + 3]); }; Buffer.prototype.readFloatLE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return this.parent.readFloatLE(this.offset + offset, !!noAssert); }; Buffer.prototype.readFloatBE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return this.parent.readFloatBE(this.offset + offset, !!noAssert); }; Buffer.prototype.readDoubleLE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length); return this.parent.readDoubleLE(this.offset + offset, !!noAssert); }; Buffer.prototype.readDoubleBE = function(offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length); return this.parent.readDoubleBE(this.offset + offset, !!noAssert); }; function checkInt(buffer, value, offset, ext, max, min) { if ((value % 1) !== 0 || value > max || value < min) throw new TypeError('value is out of bounds'); if ((offset % 1) !== 0 || offset < 0) throw new TypeError('offset is not uint'); if (offset + ext > buffer.length || buffer.length + offset < 0) throw new RangeError('Trying to write outside buffer length'); } Buffer.prototype.writeUInt8 = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); this[offset] = value; }; Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); this[offset] = value; this[offset + 1] = (value >>> 8); }; Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); this[offset] = (value >>> 8); this[offset + 1] = value; }; Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); this[offset + 3] = (value >>> 24); this[offset + 2] = (value >>> 16); this[offset + 1] = (value >>> 8); this[offset] = value; }; Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); this[offset] = (value >>> 24); this[offset + 1] = (value >>> 16); this[offset + 2] = (value >>> 8); this[offset + 3] = value; }; Buffer.prototype.writeInt8 = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); if (value < 0) value = 0xff + value + 1; this[offset] = value; }; Buffer.prototype.writeInt16LE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); this[offset] = value; this[offset + 1] = (value >>> 8); }; Buffer.prototype.writeInt16BE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); this[offset] = (value >>> 8); this[offset + 1] = value; }; Buffer.prototype.writeInt32LE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); this[offset] = value; this[offset + 1] = (value >>> 8); this[offset + 2] = (value >>> 16); this[offset + 3] = (value >>> 24); }; Buffer.prototype.writeInt32BE = function(value, offset, noAssert) { if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); this[offset] = (value >>> 24); this[offset + 1] = (value >>> 16); this[offset + 2] = (value >>> 8); this[offset + 3] = value; }; Buffer.prototype.writeFloatLE = function(value, offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); this.parent.writeFloatLE(value, this.offset + offset, !!noAssert); }; Buffer.prototype.writeFloatBE = function(value, offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); this.parent.writeFloatBE(value, this.offset + offset, !!noAssert); }; Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length); this.parent.writeDoubleLE(value, this.offset + offset, !!noAssert); }; Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length); this.parent.writeDoubleBE(value, this.offset + offset, !!noAssert); }; // http://wiki.commonjs.org/wiki/Unit_Testing/1.0 // // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! // // Originally from narwhal.js (http://narwhaljs.org) // Copyright (c) 2009 Thomas Robinson <280north.com> // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the 'Software'), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // UTILITY var util = require('util'); var pSlice = Array.prototype.slice; // 1. The assert module provides functions that throw // AssertionError's when particular conditions are not met. The // assert module must conform to the following interface. var assert = module.exports = ok; // 2. The AssertionError is defined in assert. // new assert.AssertionError({ message: message, // actual: actual, // expected: expected }) assert.AssertionError = function AssertionError(options) { this.name = 'AssertionError'; this.actual = options.actual; this.expected = options.expected; this.operator = options.operator; this.message = options.message || getMessage(this); var stackStartFunction = options.stackStartFunction || fail; if (process.versions.sm) { try { throw new Error('AssertionError'); } catch (e) { this.stack = e.stack; } var lstStack = this.stack.split('\n'); if (lstStack.length > 2) { // remove assert related stack lstStack = lstStack.slice(2); lstStack.pop(); this.stack = lstStack.join('\n'); } } else Error.captureStackTrace(this, stackStartFunction); }; // assert.AssertionError instanceof Error util.inherits(assert.AssertionError, Error); function replacer(key, value) { if (value === undefined) { return '' + value; } if (typeof value === 'number' && !isFinite(value)) { return value.toString(); } if (typeof value === 'function' || value instanceof RegExp) { return value.toString(); } return value; } function truncate(s, n) { if (typeof s == 'string') { return s.length < n ? s : s.slice(0, n); } else { return s; } } function getMessage(self) { return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + self.operator + ' ' + truncate(JSON.stringify(self.expected, replacer), 128); } // At present only the three keys mentioned above are used and // understood by the spec. Implementations or sub modules can pass // other keys to the AssertionError's constructor - they will be // ignored. // 3. All of the following functions must throw an AssertionError // when a corresponding condition is not met, with a message that // may be undefined if not provided. All assertion methods provide // both the actual and expected values to the assertion error for // display purposes. function fail(actual, expected, message, operator, stackStartFunction) { throw new assert.AssertionError({ message: message, actual: actual, expected: expected, operator: operator, stackStartFunction: stackStartFunction }); } // EXTENSION! allows for well behaved errors defined elsewhere. assert.fail = fail; // 4. Pure assertion tests whether a value is truthy, as determined // by !!guard. // assert.ok(guard, message_opt); // This statement is equivalent to assert.equal(true, !!guard, // message_opt);. To test strictly for the value true, use // assert.strictEqual(true, guard, message_opt);. function ok(value, message) { if (!!!value) { fail(value, true, message, '==', assert.ok); } } assert.ok = ok; // 5. The equality assertion tests shallow, coercive equality with // ==. // assert.equal(actual, expected, message_opt); assert.equal = function equal(actual, expected, message) { if (actual != expected) fail(actual, expected, message, '==', assert.equal); }; // 6. The non-equality assertion tests for whether two objects are not equal // with != assert.notEqual(actual, expected, message_opt); assert.notEqual = function notEqual(actual, expected, message) { if (actual == expected) { fail(actual, expected, message, '!=', assert.notEqual); } }; // 7. The equivalence assertion tests a deep equality relation. // assert.deepEqual(actual, expected, message_opt); assert.deepEqual = function deepEqual(actual, expected, message) { if (!_deepEqual(actual, expected)) { fail(actual, expected, message, 'deepEqual', assert.deepEqual); } }; function _deepEqual(actual, expected) { // 7.1. All identical values are equivalent, as determined by ===. if (actual === expected) { return true; } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) { if (actual.length != expected.length) return false; for (var i = 0; i < actual.length; i++) { if (actual[i] !== expected[i]) return false; } return true; // 7.2. If the expected value is a Date object, the actual value is // equivalent if it is also a Date object that refers to the same time. } else if (actual instanceof Date && expected instanceof Date) { return actual.getTime() === expected.getTime(); // 7.3 If the expected value is a RegExp object, the actual value is // equivalent if it is also a RegExp object with the same source and // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). } else if (actual instanceof RegExp && expected instanceof RegExp) { return actual.source === expected.source && actual.global === expected.global && actual.multiline === expected.multiline && actual.lastIndex === expected.lastIndex && actual.ignoreCase === expected.ignoreCase; // 7.4. Other pairs that do not both pass typeof value == 'object', // equivalence is determined by ==. } else if (typeof actual != 'object' && typeof expected != 'object') { return actual == expected; // 7.5 For all other Object pairs, including Array objects, equivalence is // determined by having the same number of owned properties (as verified // with Object.prototype.hasOwnProperty.call), the same set of keys // (although not necessarily the same order), equivalent values for every // corresponding key, and an identical 'prototype' property. Note: this // accounts for both named and indexed properties on Arrays. } else { return objEquiv(actual, expected); } } function isUndefinedOrNull(value) { return value === null || value === undefined; } function isArguments(object) { return Object.prototype.toString.call(object) == '[object Arguments]'; } function objEquiv(a, b) { if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) return false; // an identical 'prototype' property. if (a.prototype !== b.prototype) return false; // ~~~I've managed to break Object.keys through screwy arguments passing. // Converting to array solves the problem. var aIsArgs = isArguments(a), bIsArgs = isArguments(b); if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) return false; if (aIsArgs) { a = pSlice.call(a); b = pSlice.call(b); return _deepEqual(a, b); } try { var ka = Object.keys(a), kb = Object.keys(b), key, i; } catch (e) {// happens when one is a string literal and the other isn't return false; } // having the same number of owned properties (keys incorporates // hasOwnProperty) if (ka.length != kb.length) return false; // the same set of keys (although not necessarily the same order), ka.sort(); kb.sort(); // ~~~cheap key test for (i = ka.length - 1; i >= 0; i--) { if (ka[i] != kb[i]) return false; } // equivalent values for every corresponding key, and // ~~~possibly expensive deep test for (i = ka.length - 1; i >= 0; i--) { key = ka[i]; if (!_deepEqual(a[key], b[key])) return false; } return true; } // 8. The non-equivalence assertion tests for any deep inequality. // assert.notDeepEqual(actual, expected, message_opt); assert.notDeepEqual = function notDeepEqual(actual, expected, message) { if (_deepEqual(actual, expected)) { fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); } }; // 9. The strict equality assertion tests strict equality, as determined by ===. // assert.strictEqual(actual, expected, message_opt); assert.strictEqual = function strictEqual(actual, expected, message) { if (actual !== expected) { fail(actual, expected, message, '===', assert.strictEqual); } }; // 10. The strict non-equality assertion tests for strict inequality, as // determined by !==. assert.notStrictEqual(actual, expected, message_opt); assert.notStrictEqual = function notStrictEqual(actual, expected, message) { if (actual === expected) { fail(actual, expected, message, '!==', assert.notStrictEqual); } }; function expectedException(actual, expected) { if (!actual || !expected) { return false; } if (Object.prototype.toString.call(expected) == '[object RegExp]') { return expected.test(actual); } else if (actual instanceof expected) { return true; } else if (expected.call({}, actual) === true) { return true; } return false; } function _throws(shouldThrow, block, expected, message) { var actual; if (typeof expected === 'string') { message = expected; expected = null; } try { block(); } catch (e) { actual = e; } message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + (message ? ' ' + message : '.'); if (shouldThrow && !actual) { fail(actual, expected, 'Missing expected exception' + message); } if (!shouldThrow && expectedException(actual, expected)) { fail(actual, expected, 'Got unwanted exception' + message); } if ((shouldThrow && actual && expected && !expectedException(actual, expected)) || (!shouldThrow && actual)) { throw actual; } } // 11. Expected to throw an error: // assert.throws(block, Error_opt, message_opt); assert.throws = function(block, /* optional */error, /* optional */message) { _throws.apply(this, [true].concat(pSlice.call(arguments))); }; // EXTENSION! This is annoying to write outside this module. assert.doesNotThrow = function(block, /* optional */message) { _throws.apply(this, [false].concat(pSlice.call(arguments))); }; assert.ifError = function(err) { if (err) { throw err; } }; // Copyright & License details are available under JXCORE_LICENSE file function init(list) { list._idleNext = list; list._idlePrev = list; } exports.init = init; // show the most idle item function peek(list) { if (list._idlePrev == list) return null; return list._idlePrev; } exports.peek = peek; // remove the most idle item from the list function shift(list) { var first = list._idlePrev; remove(first); return first; } exports.shift = shift; // remove a item from its list function remove(item) { if (item._idleNext) { item._idleNext._idlePrev = item._idlePrev; } if (item._idlePrev) { item._idlePrev._idleNext = item._idleNext; } item._idleNext = null; item._idlePrev = null; } exports.remove = remove; // remove a item from its list and place at the end. function append(list, item) { remove(item); item._idleNext = list._idleNext; list._idleNext._idlePrev = item; item._idlePrev = list; list._idleNext = item; } exports.append = append; function isEmpty(list) { return list._idleNext === list; } exports.isEmpty = isEmpty; // Copyright & License details are available under JXCORE_LICENSE file var util = require('util'), path = require('path'), net = require('net'), vm = require('vm'), repl = require('repl'), inherits = util.inherits, spawn = require('child_process').spawn; exports.start = function(argv, stdin, stdout) { argv || (argv = process.argv.slice(2)); if (argv.length < 1) { console.error('Usage: node debug script.js'); process.exit(1); } // Setup input/output streams stdin = stdin || process.stdin; stdout = stdout || process.stdout; var args = ['--debug-brk'].concat(argv), interface_ = new Interface(stdin, stdout, args); stdin.resume(); process.on('uncaughtException', function(e) { console.error("There was an internal error in Node's debugger. " + 'Please report this bug.'); console.error(e.message); console.error(e.stack); if (interface_.child) interface_.child.kill(); process.exit(1); }); }; exports.port = 5858; // // Parser/Serializer for V8 debugger protocol // http://code.google.com/p/v8/wiki/DebuggerProtocol // // Usage: // p = new Protocol(); // // p.onResponse = function(res) { // // do stuff with response from V8 // }; // // socket.setEncoding('utf8'); // socket.on('data', function(s) { // // Pass strings into the protocol // p.execute(s); // }); // // function Protocol() { this._newRes(); } exports.Protocol = Protocol; Protocol.prototype._newRes = function(raw) { this.res = { raw: raw || '', headers: {} }; this.state = 'headers'; this.reqSeq = 1; this.execute(''); }; Protocol.prototype.execute = function(d) { var res = this.res; res.raw += d; switch (this.state) { case 'headers': var endHeaderIndex = res.raw.indexOf('\r\n\r\n'); if (endHeaderIndex < 0) break; var rawHeader = res.raw.slice(0, endHeaderIndex); var endHeaderByteIndex = Buffer.byteLength(rawHeader, 'utf8'); var lines = rawHeader.split('\r\n'); for (var i = 0; i < lines.length; i++) { var kv = lines[i].split(/: +/); res.headers[kv[0]] = kv[1]; } this.contentLength = +res.headers['Content-Length']; this.bodyStartByteIndex = endHeaderByteIndex + 4; this.state = 'body'; var len = Buffer.byteLength(res.raw, 'utf8'); if (len - this.bodyStartByteIndex < this.contentLength) { break; } // pass thru case 'body': var resRawByteLength = Buffer.byteLength(res.raw, 'utf8'); if (resRawByteLength - this.bodyStartByteIndex >= this.contentLength) { var buf = new Buffer(resRawByteLength); buf.write(res.raw, 0, resRawByteLength, 'utf8'); res.body = buf.slice(this.bodyStartByteIndex, this.bodyStartByteIndex + this.contentLength).toString('utf8'); // JSON parse body? res.body = res.body.length ? JSON.parse(res.body) : {}; // Done! this.onResponse(res); this._newRes(buf.slice(this.bodyStartByteIndex + this.contentLength).toString('utf8')); } break; default: throw new Error('Unknown state'); break; } }; Protocol.prototype.serialize = function(req) { req.type = 'request'; req.seq = this.reqSeq++; var json = JSON.stringify(req); return 'Content-Length: ' + Buffer.byteLength(json, 'utf8') + '\r\n\r\n' + json; }; var NO_FRAME = -1; function Client() { net.Stream.call(this); var protocol = this.protocol = new Protocol(this); this._reqCallbacks = []; var socket = this; this.currentFrame = NO_FRAME; this.currentSourceLine = -1; this.currentSource = null; this.handles = {}; this.scripts = {}; this.breakpoints = []; // Note that 'Protocol' requires strings instead of Buffers. socket.setEncoding('utf8'); socket.on('data', function(d) { protocol.execute(d); }); protocol.onResponse = this._onResponse.bind(this); } inherits(Client, net.Stream); exports.Client = Client; Client.prototype._addHandle = function(desc) { if (typeof desc != 'object' || typeof desc.handle != 'number') { return; } this.handles[desc.handle] = desc; if (desc.type == 'script') { this._addScript(desc); } }; var natives = process.binding('natives'); Client.prototype._addScript = function(desc) { this.scripts[desc.id] = desc; if (desc.name) { desc.isNative = (desc.name.replace('.js', '') in natives) || desc.name == 'node.js'; } }; Client.prototype._removeScript = function(desc) { this.scripts[desc.id] = undefined; }; Client.prototype._onResponse = function(res) { var cb, index = -1; this._reqCallbacks.some(function(fn, i) { if (fn.request_seq == res.body.request_seq) { cb = fn; index = i; return true; } }); var self = this; var handled = false; if (res.headers.Type == 'connect') { // Request a list of scripts for our own storage. self.reqScripts(); self.emit('ready'); handled = true; } else if (res.body && res.body.event == 'break') { this.emit('break', res.body); handled = true; } else if (res.body && res.body.event == 'exception') { this.emit('exception', res.body); handled = true; } else if (res.body && res.body.event == 'afterCompile') { this._addHandle(res.body.body.script); handled = true; } else if (res.body && res.body.event == 'scriptCollected') { // ??? this._removeScript(res.body.body.script); handled = true; } if (cb) { this._reqCallbacks.splice(index, 1); handled = true; var err = res.success === false && (res.message || true) || res.body.success === false && (res.body.message || true); cb(err, res.body && res.body.body || res.body, res); } if (!handled) this.emit('unhandledResponse', res.body); }; Client.prototype.req = function(req, cb) { this.write(this.protocol.serialize(req)); cb.request_seq = req.seq; this._reqCallbacks.push(cb); }; Client.prototype.reqVersion = function(cb) { cb = cb || function() {}; this.req({ command: 'version' }, function(err, body, res) { if (err) return cb(err); cb(null, res.body.body.V8Version, res.body.running); }); }; Client.prototype.reqLookup = function(refs, cb) { var self = this; // TODO: We have a cache of handle's we've already seen in this.handles // This can be used if we're careful. var req = { command: 'lookup', arguments: { handles: refs } }; cb = cb || function() {}; this.req(req, function(err, res) { if (err) return cb(err); for (var ref in res) { if (res.hasOwnProperty(ref) && typeof res[ref] == 'object') { self._addHandle(res[ref]); } } cb(null, res); }); }; Client.prototype.reqScopes = function(cb) { var self = this, req = { command: 'scopes', arguments: {} }; cb = cb || function() {}; this.req(req, function(err, res) { if (err) return cb(err); var refs = res.scopes.map(function(scope) { return scope.object.ref; }); self.reqLookup(refs, function(err, res) { if (err) return cb(err); var globals = Object.keys(res).map(function(key) { return res[key].properties.map(function(prop) { return prop.name; }); }); cb(null, globals.reverse()); }); }); }; // This is like reqEval, except it will look up the expression in each of the // scopes associated with the current frame. Client.prototype.reqEval = function(expression, cb) { var self = this; if (this.currentFrame == NO_FRAME) { // Only need to eval in global scope. this.reqFrameEval(expression, NO_FRAME, cb); return; } cb = cb || function() {}; // Otherwise we need to get the current frame to see which scopes it has. this.reqBacktrace(function(err, bt) { if (err || !bt.frames) { // ?? return cb(null, {}); } var frame = bt.frames[self.currentFrame]; var evalFrames = frame.scopes.map(function(s) { if (!s) return; var x = bt.frames[s.index]; if (!x) return; return x.index; }); self._reqFramesEval(expression, evalFrames, cb); }); }; // Finds the first scope in the array in which the epxression evals. Client.prototype._reqFramesEval = function(expression, evalFrames, cb) { if (evalFrames.length == 0) { // Just eval in global scope. this.reqFrameEval(expression, NO_FRAME, cb); return; } var self = this; var i = evalFrames.shift(); cb = cb || function() {}; this.reqFrameEval(expression, i, function(err, res) { if (!err) return cb(null, res); self._reqFramesEval(expression, evalFrames, cb); }); }; Client.prototype.reqFrameEval = function(expression, frame, cb) { var self = this; var req = { command: 'evaluate', arguments: { expression: expression } }; if (frame == NO_FRAME) { req.arguments.global = true; } else { req.arguments.frame = frame; } cb = cb || function() {}; this.req(req, function(err, res) { if (!err) self._addHandle(res); cb(err, res); }); }; // reqBacktrace(cb) // TODO: from, to, bottom Client.prototype.reqBacktrace = function(cb) { this.req({ command: 'backtrace', arguments: { inlineRefs: true } }, cb); }; // reqSetExceptionBreak(type, cb) // TODO: from, to, bottom Client.prototype.reqSetExceptionBreak = function(type, cb) { this.req({ command: 'setexceptionbreak', arguments: { type: type, enabled: true } }, cb); }; // Returns an array of objects like this: // // { handle: 11, // type: 'script', // name: 'node.js', // id: 14, // lineOffset: 0, // columnOffset: 0, // lineCount: 562, // sourceStart: '(function(process) {\n\n ', // sourceLength: 15939, // scriptType: 2, // compilationType: 0, // context: { ref: 10 }, // text: 'node.js (lines: 562)' } // Client.prototype.reqScripts = function(cb) { var self = this; cb = cb || function() {}; this.req({ command: 'scripts' }, function(err, res) { if (err) return cb(err); for (var i = 0; i < res.length; i++) { self._addHandle(res[i]); } cb(null); }); }; Client.prototype.reqContinue = function(cb) { this.currentFrame = NO_FRAME; this.req({ command: 'continue' }, cb); }; Client.prototype.listbreakpoints = function(cb) { this.req({ command: 'listbreakpoints' }, cb); }; Client.prototype.setBreakpoint = function(req, cb) { req = { command: 'setbreakpoint', arguments: req }; this.req(req, cb); }; Client.prototype.clearBreakpoint = function(req, cb) { var req = { command: 'clearbreakpoint', arguments: req }; this.req(req, cb); }; Client.prototype.reqSource = function(from, to, cb) { var req = { command: 'source', fromLine: from, toLine: to }; this.req(req, cb); }; // client.next(1, cb); Client.prototype.step = function(action, count, cb) { var req = { command: 'continue', arguments: { stepaction: action, stepcount: count } }; this.currentFrame = NO_FRAME; this.req(req, cb); }; Client.prototype.mirrorObject = function(handle, depth, cb) { var self = this; var val; if (handle.type === 'object') { var propertyRefs = handle.properties.map(function(p) { return p.ref; }); cb = cb || function() {}; this.reqLookup(propertyRefs, function(err, res) { if (err) { console.error('problem with reqLookup'); cb(null, handle); return; } var mirror, waiting = 1; if (handle.className == 'Array') { mirror = []; } else if (handle.className == 'Date') { mirror = new Date(handle.value); } else { mirror = {}; } var keyValues = []; handle.properties.forEach(function(prop, i) { var value = res[prop.ref]; var mirrorValue; if (value) { mirrorValue = value.value ? value.value : value.text; } else { mirrorValue = '[?]'; } if (Array.isArray(mirror) && typeof prop.name != 'number') { // Skip the 'length' property. return; } keyValues[i] = { name: prop.name, value: mirrorValue }; if (value && value.handle && depth > 0) { waiting++; self.mirrorObject(value, depth - 1, function(err, result) { if (!err) keyValues[i].value = result; waitForOthers(); }); } }); waitForOthers(); function waitForOthers() { if (--waiting === 0 && cb) { keyValues.forEach(function(kv) { mirror[kv.name] = kv.value; }); cb(null, mirror); } }; }); return; } else if (handle.type === 'function') { val = function() {}; } else if (handle.type === 'null') { val = null; } else if (handle.value !== undefined) { val = handle.value; } else if (handle.type === 'undefined') { val = undefined; } else { val = handle; } process.nextTick(function() { cb(null, val); }); }; Client.prototype.fullTrace = function(cb) { var self = this; cb = cb || function() {}; this.reqBacktrace(function(err, trace) { if (err) return cb(err); if (trace.totalFrames <= 0) return cb(Error('No frames')); var refs = []; for (var i = 0; i < trace.frames.length; i++) { var frame = trace.frames[i]; // looks like this: // { type: 'frame', // index: 0, // receiver: { ref: 1 }, // func: { ref: 0 }, // script: { ref: 7 }, // constructCall: false, // atReturn: false, // debuggerFrame: false, // arguments: [], // locals: [], // position: 160, // line: 7, // column: 2, // sourceLineText: ' debugger;', // scopes: [ { type: 1, index: 0 }, { type: 0, index: 1 } ], // text: '#00 blah() /home/ryan/projects/node/test-debug.js l...' } refs.push(frame.script.ref); refs.push(frame.func.ref); refs.push(frame.receiver.ref); } self.reqLookup(refs, function(err, res) { if (err) return cb(err); for (var i = 0; i < trace.frames.length; i++) { var frame = trace.frames[i]; frame.script = res[frame.script.ref]; frame.func = res[frame.func.ref]; frame.receiver = res[frame.receiver.ref]; } cb(null, trace); }); }); }; var commands = [ [ 'run (r)', 'cont (c)', 'next (n)', 'step (s)', 'out (o)', 'backtrace (bt)', 'setBreakpoint (sb)', 'clearBreakpoint (cb)' ], [ 'watch', 'unwatch', 'watchers', 'repl', 'restart', 'kill', 'list', 'scripts', 'breakOnException', 'breakpoints', 'version' ] ]; var helpMessage = 'Commands: ' + commands.map(function(group) { return group.join(', '); }).join(',\n'); function SourceUnderline(sourceText, position, repl) { if (!sourceText) return ''; var head = sourceText.slice(0, position), tail = sourceText.slice(position); // Colourize char if stdout supports colours if (repl.useColors) { tail = tail.replace(/(.+?)([^\w]|$)/, '\u001b[32m$1\u001b[39m$2'); } // Return source line with coloured char at `position` return [head, tail].join(''); } function SourceInfo(body) { var result = body.exception ? 'exception in ' : 'break in '; if (body.script) { if (body.script.name) { var name = body.script.name, dir = path.resolve() + '/'; // Change path to relative, if possible if (name.indexOf(dir) === 0) { name = name.slice(dir.length); } result += name; } else { result += '[unnamed]'; } } result += ':'; result += body.sourceLine + 1; if (body.exception) result += '\n' + body.exception.text; return result; } // This class is the repl-enabled debugger interface which is invoked on // "node debug" function Interface(stdin, stdout, args) { var self = this, child; this.stdin = stdin; this.stdout = stdout; this.args = args; // Two eval modes are available: controlEval and debugEval // But controlEval is used by default var opts = { prompt: 'debug> ', input: this.stdin, output: this.stdout, eval: this.controlEval.bind(this), useGlobal: false, ignoreUndefined: true }; if (parseInt(process.env['NODE_NO_READLINE'], 10)) { opts.terminal = false; } else if (parseInt(process.env['NODE_FORCE_READLINE'], 10)) { opts.terminal = true; // Emulate Ctrl+C if we're emulating terminal if (!this.stdout.isTTY) { process.on('SIGINT', function() { self.repl.rli.emit('SIGINT'); }); } } if (parseInt(process.env['NODE_DISABLE_COLORS'], 10)) { opts.useColors = false; } this.repl = repl.start(opts); // Do not print useless warning repl._builtinLibs.splice(repl._builtinLibs.indexOf('repl'), 1); // Kill child process when main process dies this.repl.on('exit', function() { process.exit(0); }); // Handle all possible exits process.on('exit', this.killChild.bind(this)); process.once('SIGTERM', process.exit.bind(process, 0)); process.once('SIGHUP', process.exit.bind(process, 0)); var proto = Interface.prototype, ignored = ['pause', 'resume', 'exitRepl', 'handleBreak', 'requireConnection', 'killChild', 'trySpawn', 'controlEval', 'debugEval', 'print', 'childPrint', 'clearline'], shortcut = { 'run': 'r', 'cont': 'c', 'next': 'n', 'step': 's', 'out': 'o', 'backtrace': 'bt', 'setBreakpoint': 'sb', 'clearBreakpoint': 'cb', 'pause_': 'pause' }; function defineProperty(key, protoKey) { // Check arity var fn = proto[protoKey].bind(self); if (proto[protoKey].length === 0) { Object.defineProperty(self.repl.context, key, { get: fn, enumerable: true, configurable: false }); } else { self.repl.context[key] = fn; } }; // Copy all prototype methods in repl context // Setup them as getters if possible for (var i in proto) { if (Object.prototype.hasOwnProperty.call(proto, i) && ignored.indexOf(i) === -1) { defineProperty(i, i); if (shortcut[i]) defineProperty(shortcut[i], i); } } this.killed = false; this.waiting = null; this.paused = 0; this.context = this.repl.context; this.history = { debug: [], control: [] }; this.breakpoints = []; this._watchers = []; // Run script automatically this.pause(); // XXX Need to figure out why we need this delay setTimeout(function() { self.run(function() { self.resume(); }); }, 10); } // Stream control Interface.prototype.pause = function() { if (this.killed || this.paused++ > 0) return false; this.repl.rli.pause(); this.stdin.pause(); }; Interface.prototype.resume = function(silent) { if (this.killed || this.paused === 0 || --this.paused !== 0) return false; this.repl.rli.resume(); if (silent !== true) { this.repl.displayPrompt(); } this.stdin.resume(); if (this.waiting) { this.waiting(); this.waiting = null; } }; // Clear current line Interface.prototype.clearline = function() { if (this.stdout.isTTY) { this.stdout.cursorTo(0); this.stdout.clearLine(1); } else { this.stdout.write('\b'); } }; // Print text to output stream Interface.prototype.print = function(text, oneline) { if (this.killed) return; this.clearline(); this.stdout.write(typeof text === 'string' ? text : util.inspect(text)); if (oneline !== true) { this.stdout.write('\n'); } }; // Format and print text from child process Interface.prototype.childPrint = function(text) { this.print(text.toString().split(/\r\n|\r|\n/g).filter(function(chunk) { return chunk; }).map(function(chunk) { return '< ' + chunk; }).join('\n')); this.repl.displayPrompt(true); }; // Errors formatting Interface.prototype.error = function(text) { this.print(text); this.resume(); }; // Debugger's `break` event handler Interface.prototype.handleBreak = function(r) { var self = this; this.pause(); // Save execution context's data this.client.currentSourceLine = r.sourceLine; this.client.currentSourceLineText = r.sourceLineText; this.client.currentSourceColumn = r.sourceColumn; this.client.currentFrame = 0; this.client.currentScript = r.script && r.script.name; // Print break data this.print(SourceInfo(r)); // Show watchers' values this.watchers(true, function(err) { if (err) return self.error(err); // And list source self.list(2); self.resume(true); }); }; // Internal method for checking connection state Interface.prototype.requireConnection = function() { if (!this.client) { this.error('App isn\'t running... Try `run` instead'); return false; } return true; }; // Evals // Used for debugger's commands evaluation and execution Interface.prototype.controlEval = function(code, context, filename, callback) { try { // Repeat last command if empty line are going to be evaluated if (this.repl.rli.history && this.repl.rli.history.length > 0) { if (code === '(\n)') { code = '(' + this.repl.rli.history[0] + '\n)'; } } var result = vm.runInContext(code, context, filename); // Repl should not ask for next command // if current one was asynchronous. if (this.paused === 0) return callback(null, result); // Add a callback for asynchronous command // (it will be automatically invoked by .resume() method this.waiting = function() { callback(null, result); }; } catch (e) { callback(e); } }; // Used for debugger's remote evaluation (`repl`) commands Interface.prototype.debugEval = function(code, context, filename, callback) { if (!this.requireConnection()) return; var self = this, client = this.client; // Repl asked for scope variables if (code === '.scope') { client.reqScopes(callback); return; } var frame = client.currentFrame === NO_FRAME ? frame : undefined; self.pause(); // Request remote evaluation globally or in current frame client.reqFrameEval(code, frame, function(err, res) { if (err) { callback(err); self.resume(true); return; } // Request object by handles (and it's sub-properties) client.mirrorObject(res, 3, function(err, mirror) { callback(null, mirror); self.resume(true); }); }); }; // Utils // Returns number of digits (+1) function intChars(n) { // TODO dumb: if (n < 50) { return 3; } else if (n < 950) { return 4; } else if (n < 9950) { return 5; } else { return 6; } } // Adds spaces and prefix to number function leftPad(n, prefix) { var s = n.toString(), nchars = intChars(n), nspaces = nchars - s.length - 1; prefix || (prefix = ' '); for (var i = 0; i < nspaces; i++) { prefix += ' '; } return prefix + s; } // Commands // Print help message Interface.prototype.help = function() { this.print(helpMessage); }; // Run script Interface.prototype.run = function() { var callback = arguments[0]; if (this.child) { this.error('App is already running... Try `restart` instead'); callback && callback(true); } else { this.trySpawn(callback); } }; // Restart script Interface.prototype.restart = function() { if (!this.requireConnection()) return; var self = this; self.pause(); self.killChild(); // XXX need to wait a little bit for the restart to work? setTimeout(function() { self.trySpawn(); self.resume(); }, 1000); }; // Print version Interface.prototype.version = function() { if (!this.requireConnection()) return; var self = this; this.pause(); this.client.reqVersion(function(err, v) { if (err) { self.error(err); } else { self.print(v); } self.resume(); }); }; // List source code Interface.prototype.list = function(delta) { if (!this.requireConnection()) return; delta || (delta = 5); var self = this, client = this.client, from = client.currentSourceLine - delta + 1, to = client.currentSourceLine + delta + 1; self.pause(); client.reqSource(from, to, function(err, res) { if (err || !res) { self.error('You can\'t list source code right now'); self.resume(); return; } var lines = res.source.split('\n'); for (var i = 0; i < lines.length; i++) { var lineno = res.fromLine + i + 1; if (lineno < from || lineno > to) continue; var current = lineno == 1 + client.currentSourceLine, breakpoint = client.breakpoints.some(function(bp) { return (bp.scriptReq === client.currentScript || bp.script === client.currentScript) && bp.line == lineno; }); if (lineno == 1) { // The first line needs to have the module wrapper filtered out of // it. var wrapper = require('module').wrapper[0]; lines[i] = lines[i].slice(wrapper.length); client.currentSourceColumn -= wrapper.length; } // Highlight executing statement var line; if (current) { line = SourceUnderline(lines[i], client.currentSourceColumn, self.repl); } else { line = lines[i]; } self.print(leftPad(lineno, breakpoint && '*') + ' ' + line); } self.resume(); }); }; // Print backtrace Interface.prototype.backtrace = function() { if (!this.requireConnection()) return; var self = this, client = this.client; self.pause(); client.fullTrace(function(err, bt) { if (err) { self.error('Can\'t request backtrace now'); self.resume(); return; } if (bt.totalFrames == 0) { self.print('(empty stack)'); } else { var trace = [], firstFrameNative = bt.frames[0].script.isNative; for (var i = 0; i < bt.frames.length; i++) { var frame = bt.frames[i]; if (!firstFrameNative && frame.script.isNative) break; var text = '#' + i + ' '; if (frame.func.inferredName && frame.func.inferredName.length > 0) { text += frame.func.inferredName + ' '; } text += path.basename(frame.script.name) + ':'; text += (frame.line + 1) + ':' + (frame.column + 1); trace.push(text); } self.print(trace.join('\n')); } self.resume(); }); }; // First argument tells if it should display internal node scripts or not // (available only for internal debugger's functions) Interface.prototype.scripts = function() { if (!this.requireConnection()) return; var client = this.client, displayNatives = arguments[0] || false, scripts = []; this.pause(); for (var id in client.scripts) { if (!client.scripts.hasOwnProperty(id)) continue; var script = client.scripts[id]; if (typeof script == 'object' && script.name) { if (displayNatives || script.name == client.currentScript || !script.isNative) { scripts.push( (script.name == client.currentScript ? '* ' : ' ') + id + ': ' + path.basename(script.name) ); } } } this.print(scripts.join('\n')); this.resume(); }; // Continue execution of script Interface.prototype.cont = function() { if (!this.requireConnection()) return; this.pause(); var self = this; this.client.reqContinue(function(err) { if (err) self.error(err); self.resume(); }); }; // Step commands generator Interface.stepGenerator = function(type, count) { return function() { if (!this.requireConnection()) return; var self = this; self.pause(); self.client.step(type, count, function(err, res) { if (err) self.error(err); self.resume(); }); }; }; // Jump to next command Interface.prototype.next = Interface.stepGenerator('next', 1); // Step in Interface.prototype.step = Interface.stepGenerator('in', 1); // Step out Interface.prototype.out = Interface.stepGenerator('out', 1); // Watch Interface.prototype.watch = function(expr) { this._watchers.push(expr); }; // Unwatch Interface.prototype.unwatch = function(expr) { var index = this._watchers.indexOf(expr); // Unwatch by expression // or // Unwatch by watcher number this._watchers.splice(index !== -1 ? index : +expr, 1); }; // List watchers Interface.prototype.watchers = function() { var self = this, verbose = arguments[0] || false, callback = arguments[1] || function() {}, waiting = this._watchers.length, values = []; this.pause(); if (!waiting) { this.resume(); return callback(); } this._watchers.forEach(function(watcher, i) { self.debugEval(watcher, null, null, function(err, value) { values[i] = err ? '' : value; wait(); }); }); function wait() { if (--waiting === 0) { if (verbose) self.print('Watchers:'); self._watchers.forEach(function(watcher, i) { self.print(leftPad(i, ' ') + ': ' + watcher + ' = ' + JSON.stringify(values[i])); }); if (verbose) self.print(''); self.resume(); callback(null); } } }; // Break on exception Interface.prototype.breakOnException = function breakOnException() { if (!this.requireConnection()) return; var self = this; // Break on exceptions this.pause(); this.client.reqSetExceptionBreak('all', function(err, res) { self.resume(); }); }; // Add breakpoint Interface.prototype.setBreakpoint = function(script, line, condition, silent) { if (!this.requireConnection()) return; var self = this, scriptId, ambiguous; // setBreakpoint() should insert breakpoint on current line if (script === undefined) { script = this.client.currentScript; line = this.client.currentSourceLine + 1; } // setBreakpoint(line-number) should insert breakpoint in current script if (line === undefined && typeof script === 'number') { line = script; script = this.client.currentScript; } if (/\(\)$/.test(script)) { // setBreakpoint('functionname()'); var req = { type: 'function', target: script.replace(/\(\)$/, ''), condition: condition }; } else { // setBreakpoint('scriptname') if (script != +script && !this.client.scripts[script]) { var scripts = this.client.scripts; Object.keys(scripts).forEach(function(id) { if (scripts[id] && scripts[id].name && scripts[id].name.indexOf(script) !== -1) { if (scriptId) { ambiguous = true; } scriptId = id; } }); } else { scriptId = script; } if (ambiguous) return this.error('Script name is ambiguous'); if (line <= 0) return this.error('Line should be a positive value'); var req; if (scriptId) { req = { type: 'scriptId', target: scriptId, line: line - 1, condition: condition }; } else { this.print('Warning: script \'' + script + '\' was not loaded yet.'); var escapedPath = script.replace(/([/\\.?*()^${}|[\]])/g, '\\$1'); var scriptPathRegex = '^(.*[\\/\\\\])?' + escapedPath + '$'; req = { type: 'scriptRegExp', target: scriptPathRegex, line: line - 1, condition: condition }; } } self.pause(); self.client.setBreakpoint(req, function(err, res) { if (err) { if (!silent) { self.error(err); } } else { if (!silent) { self.list(5); } // Try load scriptId and line from response if (!scriptId) { scriptId = res.script_id; line = res.line + 1; } // Remember this breakpoint even if scriptId is not resolved yet self.client.breakpoints.push({ id: res.breakpoint, scriptId: scriptId, script: (self.client.scripts[scriptId] || {}).name, line: line, condition: condition, scriptReq: script }); } self.resume(); }); }; // Clear breakpoint Interface.prototype.clearBreakpoint = function(script, line) { if (!this.requireConnection()) return; var ambiguous, breakpoint, index; this.client.breakpoints.some(function(bp, i) { if (bp.scriptId === script || bp.scriptReq === script || (bp.script && bp.script.indexOf(script) !== -1)) { if (index !== undefined) { ambiguous = true; } if (bp.line === line) { index = i; breakpoint = bp.id; return true; } } }); if (ambiguous) return this.error('Script name is ambiguous'); if (breakpoint === undefined) { return this.error('Script : ' + script + ' not found'); } var self = this, req = { breakpoint: breakpoint }; self.pause(); self.client.clearBreakpoint(req, function(err, res) { if (err) { self.error(err); } else { self.client.breakpoints.splice(index, 1); self.list(5); } self.resume(); }); }; // Show breakpoints Interface.prototype.breakpoints = function() { if (!this.requireConnection()) return; this.pause(); var self = this; this.client.listbreakpoints(function(err, res) { if (err) { self.error(err); } else { self.print(res); self.resume(); } }); }; // Pause child process Interface.prototype.pause_ = function() { if (!this.requireConnection()) return; var self = this, cmd = 'process._debugPause();'; this.pause(); this.client.reqFrameEval(cmd, NO_FRAME, function(err, res) { if (err) { self.error(err); } else { self.resume(); } }); }; // Kill child process Interface.prototype.kill = function() { if (!this.child) return; this.killChild(); }; // Activate debug repl Interface.prototype.repl = function() { if (!this.requireConnection()) return; var self = this; self.print('Press Ctrl + C to leave debug repl'); // Don't display any default messages var listeners = this.repl.rli.listeners('SIGINT').slice(0); this.repl.rli.removeAllListeners('SIGINT'); // Exit debug repl on Ctrl + C this.repl.rli.once('SIGINT', function() { // Restore all listeners process.nextTick(function() { listeners.forEach(function(listener) { self.repl.rli.on('SIGINT', listener); }); }); // Exit debug repl self.exitRepl(); }); // Set new this.repl.eval = this.debugEval.bind(this); this.repl.context = {}; // Swap history this.history.control = this.repl.rli.history; this.repl.rli.history = this.history.debug; this.repl.prompt = '> '; this.repl.rli.setPrompt('> '); this.repl.displayPrompt(); }; // Exit debug repl Interface.prototype.exitRepl = function() { // Restore eval this.repl.eval = this.controlEval.bind(this); // Swap history this.history.debug = this.repl.rli.history; this.repl.rli.history = this.history.control; this.repl.context = this.context; this.repl.prompt = 'debug> '; this.repl.rli.setPrompt('debug> '); this.repl.displayPrompt(); }; // Quit Interface.prototype.quit = function() { this.killChild(); process.exit(0); }; // Kills child process Interface.prototype.killChild = function() { if (this.child) { this.child.kill(); this.child = null; } if (this.client) { // Save breakpoints this.breakpoints = this.client.breakpoints; this.client.destroy(); this.client = null; } }; // Spawns child process (and restores breakpoints) Interface.prototype.trySpawn = function(cb) { var self = this, breakpoints = this.breakpoints || [], port = exports.port, host = 'localhost', childArgs = this.args; this.killChild(); if (this.args.length === 2) { var match = this.args[1].match(/^([^:]+):(\d+)$/); if (match) { // Connecting to remote debugger // `node debug localhost:5858` host = match[1]; port = parseInt(match[2], 10); this.child = { kill: function() { // TODO Do we really need to handle it? } }; } } else if (this.args.length === 3) { // `node debug -p pid` if (this.args[1] === '-p' && /^\d+$/.test(this.args[2])) { this.child = { kill: function() { // TODO Do we really need to handle it? } }; process._debugProcess(parseInt(this.args[2], 10)); } else { var match = this.args[1].match(/^--port=(\d+)$/); if (match) { // Start debugger on custom port // `node debug --port=5858 app.js` port = parseInt(match[1], 10); childArgs = ['--debug-brk=' + port].concat(this.args.slice(2)); } } } if (!this.child) { this.child = spawn(process.execPath, childArgs); this.child.stdout.on('data', this.childPrint.bind(this)); this.child.stderr.on('data', this.childPrint.bind(this)); } this.pause(); var client = self.client = new Client(), connectionAttempts = 0; client.once('ready', function() { self.stdout.write(' ok\n'); // Restore breakpoints breakpoints.forEach(function(bp) { self.print('Restoring breakpoint ' + bp.scriptReq + ':' + bp.line); self.setBreakpoint(bp.scriptReq, bp.line, bp.condition, true); }); client.on('close', function() { self.pause(); self.print('program terminated'); self.resume(); self.client = null; self.killChild(); }); if (cb) cb(); self.resume(); }); client.on('unhandledResponse', function(res) { self.pause(); self.print('\nunhandled res:' + JSON.stringify(res)); self.resume(); }); client.on('break', function(res) { self.handleBreak(res.body); }); client.on('exception', function(res) { self.handleBreak(res.body); }); client.on('error', connectError); function connectError() { // If it's failed to connect 4 times then don't catch the next error if (connectionAttempts >= 10) { client.removeListener('error', connectError); } setTimeout(attemptConnect, 500); } function attemptConnect() { ++connectionAttempts; self.stdout.write('.'); client.connect(port, host); } setTimeout(function() { self.print('connecting..', true); attemptConnect(); }, 50); }; // Copyright & License details are available under JXCORE_LICENSE file (function(process) { this.global = this; if (!Error.captureStackTrace) { var _stackProto = function(msg, fileName, lineNumber, columnNumber) { if (fileName && fileName.indexOf('@') >= 0) { var spl = fileName.split('@'); this._fileName = spl[1]; this._functionName = spl[0]; } else { this._fileName = fileName; this._functionName = 'unknown'; } this._lineNumber = lineNumber; this._columnNumber = columnNumber; this._msg = msg; }; _stackProto.prototype.getFileName = function() { return this._fileName; }; _stackProto.prototype.getColumnNumber = function() { return this._columnNumber; }; _stackProto.prototype.getLineNumber = function() { return this._lineNumber; }; _stackProto.prototype.toString = function() { return this._msg; }; _stackProto.prototype.isEval = function() { // TODO(obastemur) fix this! return false; }; _stackProto.prototype.getFunctionName = function() { return this._functionName; }; Error.captureStackTrace = function(err, __) { var st; if (typeof err === 'undefined' || typeof err === 'string') { return; } if (!err.stack) { clone__(new Error(''), err); if (!err.stack) err.stack = new Error('').stack; // silly but we don't want it to throw here no matter what if (err.stack.split) { st = err.stack.split('\n'); st.shift(); } else if (err.stack.shift){ err.stack.shift(); } } else { if (!Array.isArray(err.stack)) st = err.stack.split('\n'); } if (Array.isArray(err.stack)) { // TODO(obastemur) bug ? app gives back an object that was already // processed } else { err.stack = new Array(); var stackLimit = Error.stackTraceLimit ? Error.stackTraceLimit : 9; var max = Math.min(stackLimit, st.length); for (var i = 0; i < max; i++) { var arr = [], msg; if (st[i].trim().length == 0) msg = ""; else { arr = st[i].split(':'); msg = ' at ' + st[i]; } if (arr.length == 3) { err.stack[i] = new _stackProto(msg, arr[0], arr[1], arr[2]); } else { err.stack[i] = new _stackProto(msg, err.fileName, err.lineNumber, err.columnNumber); } } err.stack.toString = function() { var arr = err.stack.join('\n'); if (arr.length > 4 && arr.substr(arr.length - 3, 2) == 'at') arr = arr.substr(0, arr.length - 3); if (!err.name) err.name = 'Error'; return err.name + ': ' + err.message + '\n' + arr; }; } if (Error.prepareStackTrace) { try { var newStack = Error.prepareStackTrace(err, __ || err.stack); if (newStack) err.stack = newStack; } catch (e) { // silly but do not let Error.prepareStackTrace throwing } } }; function clone__(s, t) { Object.getOwnPropertyNames(s).forEach(function(name) { try { var obj = Object.getOwnPropertyDescriptor(s, name); if (obj.value === s) obj.value = t; Object.defineProperty(t, name, obj); } catch (e) { } }); } var origError = Error; function New_Error(cons, args) { function tmp() { var old = null; if (Error.stackTraceLimit || Error.stackTraceLimit === 0) { old = Error.stackTraceLimit; Error.stackTraceLimit += 3; } var err = cons.apply(this, args); Error.captureStackTrace(err); if (old !== null) Error.stackTraceLimit = old; err.fileName = err.stack[3]._fileName; err.lineNumber = err.stack[3]._lineNumber; err.columnNumber = err.stack[3]._columnNumber; err.stack = err.stack.slice(3).join('\n').replace(/ at /g, ''); return err; } tmp.prototype = cons.prototype; return new tmp(); } [ Error, RangeError, SyntaxError, TypeError ].forEach(function(err) { var newError = function() { var obj = New_Error(err, arguments); obj.stack_ = obj.stack; obj.stack_reached_ = false; Object.defineProperty(obj, 'stack', { enumerable : true, configurable : true, get : function() { if (!this.stack_reached_) { if (Error.prepareStackTrace) { var tmp = { message: this.message, stack: this.stack_ }; try { origError.captureStackTrace(tmp); var newStack = Error.prepareStackTrace(this, tmp.stack); if (newStack) this.stack_ = newStack; } catch (e) { // silly but do not let Error.prepareStackTrace throwing } } this.stack_reached_ = true; } return this.stack_; }, set : function(value) { this.stack_ = value; } }); Object.keys(obj).forEach(function(key) { Object.defineProperty(obj, key, { enumerable : false }); }); return obj; }; clone__(err, newError); newError.toString = function() { return err.toString(); }; err.prototype.toString = function() { if (!this.message) return this.name; return this.name + ": " + this.message; }; global[err.name] = newError; }); if (!global.gc) { global.gc = function() { jxcore.tasks.forceGC(); } } } var hasRestartListener = false; function startup() { var EventEmitter = NativeModule.require('events').EventEmitter; process.__proto__ = Object.create(EventEmitter.prototype, { constructor: { value: process.constructor } }); EventEmitter.call(process); process.EventEmitter = EventEmitter; // process.EventEmitter is deprecated // do this good and early, since it handles errors. startup.processFatal(); startup.globalVariables(); startup.globalTimeouts(); startup.globalConsole(); startup.globalJXcore(); startup.processAssert(); startup.processConfig(); startup.processNextTick(); startup.processStdio(); startup.processKillAndExit(); startup.processSignalHandlers(); if (process.argv[1] !== '--debug-agent') startup.processChannel(); startup.processRawDebug(); startup.resolveArgv0(); if (!process.subThread) { var __exitCode = 0; var __pstart = Date.now(); var __kill = function(code) { try {// previously skipped (process.FatalException) process.emit('exit', code); } catch (er) { // nothing to be done about it at this point. } if (!code && code !== 0) process.exit(__exitCode); else process.exit(code); }; var resetBody = function(code) { if (Date.now() - __pstart < 5000) { var diff = Date.now() - __pstart; console.error( 'Automatic reset feature is only applicable to applications ' + 'active for at least 5000 milliseconds'); console.error('The application was alive for ', diff, 'ms'); __kill(code); return; } var fs = NativeModule.require('fs'); var path = NativeModule.require('path'); var fname = './jxcore.' + path.basename(process.mainModule.filename) + '.log'; if (fs.existsSync(fname)) fs.unlinkSync(fname); var spawn = NativeModule.require('child_process').spawn, out = fs .openSync(fname, 'a'), err = fs.openSync(fname, 'a'); var cmd = process.argv[0]; var params = process.argv.slice(1); params.push('$JX$CORE_APP_RESET'); var child = spawn(cmd, params, { detached: true, stdio: ['ignore', out, err] }); child.unref(); __kill(code); }; process.on('$$restart', function(code) { try { __exitCode = code; if (startup.hasResetCB()) process.emit('restart', resetBody, code); else { process.exit(code); } } catch (e) { console.error('process.on -> restart', e); } }); } var co = NativeModule.require('console'); var process_restarted = jxcore.utils.argv.remove('$JX$CORE_APP_RESET'); var parsedArgv = jxcore.utils.argv.parse(); // There are various modes that Node can run in. The most common two // are running from a script and running the REPL - but there are a few // others like the debugger or running --eval arguments. Here we decide // which mode we run in. var getActiveFolder = function() { var sep; try { sep = process.cwd() + NativeModule.require('path').sep; } catch (e) { co.error( 'Perhaps the path you are running on is not ' + 'exist any more. Please revisit the path and try again.'); process.exit(1); } return sep; }; var isPackaged = checkSource(process.subThread); if (process.isPackaged != isPackaged) { if (process.subThread) { process.isPackaged = isPackaged; } else { co.error('Binary corrupted'); process.exit(1); } } if (!process.isPackaged) { delete (process.isPackaged); } else { process._EmbeddedSource = true; } var __ops = { install: false, npm: false, compile: false, package: false, packagetojx: false }; if (!process.isEmbedded && !process._EmbeddedSource && !process.subThread) { for (var o in __ops) { if (__ops.hasOwnProperty(o) && process.argv[1] === o) { var sep = getActiveFolder(); __ops[o] = !NativeModule.require('fs').existsSync(sep + o + '.js'); if (!__ops[o]) { co.error( 'while [jx ' + o + '] is a special command, the current folder has ' + o + '.js, running that instead.\n'); } break; } } } var Module = NativeModule.require('module'); if (__ops.compile) { if (!process.argv[2]) { jxcore.utils.console.log('JXcore Packaging System'); co.log('please provide the jxp file to compile'); co.log('usage: compile [jxp file to compile]'); co.log(''); return; } co.log('Processing the project file..'); NativeModule.require('_jx_package').compile(process.argv, __ops); return; } else if (__ops.package || __ops.packagetojx) { if (process.argv.length < 3) { jxcore.utils.console.log('J' + 'Xcore Packaging System'); co.log('usage: package [main javascript file] [project name]'); co.log(''); process.exit(); return; } co.log('Processing the folder..'); NativeModule.require('_jx_package').package(process.argv); return; } else if (__ops.install || __ops.npm) { NativeModule.require('_jx_install').install(); return; } else if (process.argv[1] == 'debug') { // Start the debugger agent var d = NativeModule.require('_debugger'); d.start(); } else if (process.argv[1] == '--debug-agent') { // Start the debugger agent var d = NativeModule.require('_debugger_agent'); d.start(); } else if (process._eval != null) { // User passed '-e' or '--eval' arguments to Node. NativeModule.require('_jx_config'); evalScript('[eval]'); } else if (process.argv[1] || process._EmbeddedSource) { if (process.subThread && process._EmbeddedSource) { process._EmbeddedSource = false; } var __debug = false; if (!process._EmbeddedSource) { __debug = global.v8debug && process.execArgv.some(function(arg) { return arg.match(/^--debug-brk(=[0-9]*)?$/); }); var mter = parsedArgv.mt || parsedArgv['mt-keep']; if (mter) { var mterCount = mter.isInt ? mter.asInt : -1; if (mterCount >= 2 && mterCount <= 16) process._MTED = true; else { co.log('\nusage: mt/mt-keep [source file]\n'); co.log('remarks: by default it starts with 2 threads.'); co.log('mt:n OR mt-keep:n (n) the number of threads. (max 16)'); co.log('jx mt:3 [source file]\n'); process.exit(); return; } } else if (!process.subThread && process.argv[1].toLowerCase() == 'monitor') { process._Monitor = true; } if (!process.subThread && !process._Monitor) { var path = NativeModule.require('path'); if (process._MTED) { process.argv[2] = path.resolve(process.argv[2]); } else { // Fix for Android release builds if (!process.cwd()) { process.cwd = function() { return "/system/bin/"; } } // Fix end process.argv[1] = path.resolve(process.argv[1]); } NativeModule.require('_jx_config'); } } else { NativeModule.require('_jx_config'); } if (!process.subThread && !process._Monitor) { // If this is a worker in cluster mode, start up the communication // channel. if (process.env.NODE_UNIQUE_ID) { var cluster = NativeModule.require('cluster'); cluster._setupWorker(); // Make sure it's not accidentally inherited by child processes. delete process.env.NODE_UNIQUE_ID; } } if (__debug) { var debugTimeout = +process.env.NODE_DEBUG_TIMEOUT || 50; setTimeout(Module.runMain, debugTimeout); } else { if (process_restarted) { // in case the main app was waiting for threads (~500ms) node.cc var restartInterval = +process.env.JX_RESTART_INTERVAL || 500; setTimeout(Module.runMain, restartInterval); } else { Module.runMain(); } } if (process.isPackaged && process.env.JX_MONITOR_RUN) { var monHelper = NativeModule.require('_jx_monitorHelper'); // if app dies before start_delay, that's ok: following will not take // place monHelper.tryToFollowMeOrExit(); } } else { // If -i or --interactive were passed, or stdin is a TTY. if (process._forceRepl || NativeModule.require('tty').isatty(0)) { // REPL var opts = { useGlobal: true, ignoreUndefined: false }; if (parseInt(process.env['NODE_NO_READLINE'], 10)) { opts.terminal = false; } if (parseInt(process.env['NODE_DISABLE_COLORS'], 10)) { opts.useColors = false; } var repl = Module.requireRepl().start(opts); repl.on('exit', function() { process.exit(); }); } else { // Read all of stdin - execute it. process.stdin.setEncoding('utf8'); var code = ''; process.stdin.on('data', function(d) { code += d; }); process.stdin.on('end', function() { process._eval = code; evalScript('[stdin]'); }); } } } startup.globalVariables = function() { global.process = process; global.global = global; global.GLOBAL = global; global.root = global; global.Buffer = NativeModule.require('buffer').Buffer; process.binding('buffer').setFastBufferConstructor(global.Buffer); process.domain = null; process._exiting = false; var tw = process.binding('thread_wrap'); process.sendToMain = function(obj) { if (process.__reset) return; if (!process.subThread) jxcore.tasks.emit('message', -1, obj); else tw.sendToAll(-1, JSON.stringify({ threadId: process.threadId, params: obj }), process.threadId); }; process.sendToThread = function(threadId, obj) { if (process.__reset) return; if (threadId == null || threadId == undefined) { throw new TypeError('threadId must be defined'); } if (threadId < -1 || threadId > 63) { throw new RangeError('threadId must be between -1 and 63'); } tw.sendToAll(threadId, JSON.stringify({ tid: process.threadId, data: obj }), process.threadId); }; process.sendToThreads = function(obj) { if (process.__reset) return; tw.sendToAll(-2, JSON.stringify({ tid: process.threadId, data: obj }), process.threadId); }; process.keepAlive = function() { // DUMMY console.warn("process.keepAlive shouldn't be called from main thread"); }; process.release = function() { // DUMMY console.warn("process.release shouldn't be called from main thread"); }; process.unloadThread = function() { // DUMMY console.warn("process.unloadThread shouldn't be called from main thread"); }; }; startup.globalTimeouts = function() { global.setTimeout = function() { var t = NativeModule.require('timers'); return t.setTimeout.apply(this, arguments); }; global.setInterval = function() { var t = NativeModule.require('timers'); return t.setInterval.apply(this, arguments); }; global.clearTimeout = function() { var t = NativeModule.require('timers'); return t.clearTimeout.apply(this, arguments); }; global.clearInterval = function() { var t = NativeModule.require('timers'); return t.clearInterval.apply(this, arguments); }; global.setImmediate = function() { var t = NativeModule.require('timers'); return t.setImmediate.apply(this, arguments); }; global.clearImmediate = function() { var t = NativeModule.require('timers'); return t.clearImmediate.apply(this, arguments); }; }; startup.globalConsole = function() { global.__defineGetter__('console', function() { return NativeModule.require('console'); }); }; startup.globalJXcore = function() { global.__defineGetter__('jxcore', function() { var obj = {}; obj.__defineGetter__('utils', function() { return NativeModule.require('_jx_utils'); }); obj.__defineGetter__('store', function() { return NativeModule.require('_jx_memStore').store; }); obj.__defineGetter__('tasks', function() { return NativeModule.require('_jx_tasks'); }); obj.__defineGetter__('monitor', function() { return NativeModule.require('_jx_monitor'); }); obj.__defineGetter__('embeddedModule', function() { return NativeModule.require('_jx_loadEmbedded'); }); obj.__defineGetter__('uwp', function() { return NativeModule.require('_jx_loadEmbedded').require('node-uwp'); }); return obj; }); }; startup._lazyConstants = null; startup.lazyConstants = function() { if (!startup._lazyConstants) { startup._lazyConstants = process.binding('constants'); } return startup._lazyConstants; }; startup.processFatal = function() { // call into the active domain, or emit uncaughtException, // and exit if there are no listeners. process._fatalException = function(er) { var caught = false; if (process.domain) { var domain = process.domain; var domainModule = NativeModule.require('domain'); var domainStack = domainModule._stack; // ignore errors on disposed domains. // // XXX This is a bit stupid. We should probably get rid of // domain.dispose() altogether. It's almost always a terrible // idea. --isaacs if (domain._disposed) return true; er.domain = domain; er.domainThrown = true; // wrap this in a try/catch so we don't get infinite throwing try { // One of three things will happen here. // // 1. There is a handler, caught = true // 2. There is no handler, caught = false // 3. It throws, caught = false // // If caught is false after this, then there's no need to exit() // the domain, because we're going to crash the process anyway. caught = domain.emit('error', er); // Exit all domains on the stack. Uncaught exceptions end the // current tick and no domains should be left on the stack // between ticks. var domainModule = NativeModule.require('domain'); domainStack.length = 0; domainModule.active = process.domain = null; } catch (er2) { // The domain error handler threw! oh no! // See if another domain can catch THIS error, // or else crash on the original one. // If the user already exited it, then don't double-exit. if (domain === domainModule.active) domainStack.pop(); if (domainStack.length) { var parentDomain = domainStack[domainStack.length - 1]; process.domain = domainModule.active = parentDomain; caught = process._fatalException(er2); } else caught = false; } } else { caught = process.emit('uncaughtException', er); } // if someone handled it, then great. otherwise, die in C++ land // since that means that we'll exit the process, emit the 'exit' event if (!caught) { try { if (!process._exiting && !hasRestartListener) { process._exiting = true; process.emit('exit', 1); } } catch (er) { // nothing to be done about it at this point. } } // if we handled an error, then make sure any ticks get processed if (caught) { process._needTickCallback(); } return caught; }; }; var assert; startup.processAssert = function() { // Note that calls to assert() are pre-processed out by JS2C for the // normal build of node. They persist only in the node_g build. // Similarly for debug(). assert = process.assert = function(x, msg) { if (!x) throw new Error(msg || 'assertion error'); }; }; startup.processConfig = function() { // used for `process.config`, but not a real module var config = NativeModule._source.config; delete NativeModule._source.config; // strip the gyp comment line at the beginning config = config.split('\n').slice(1).join('\n').replace(/'/g, '"'); process.config = JSON.parse(config, function(key, value) { if (value === 'true') return true; if (value === 'false') return false; return value; }); }; process.dlopen = function(module, filename) { var isWindows = process.platform === 'win32' || process.platform === 'winrt'; if (isWindows) { filename = filename.toLowerCase(); } var gpath = process._dlopen(module, filename); if (gpath) { var fs = NativeModule.require('fs'); var pathModule = NativeModule.require('path'); var err = new Error( 'On this system, processes are limited to run native modules only ' + 'from global repository. ' + filename + " wasn't exist. " + "Please make sure it's a standard JXcore / node.js native module."); var i = filename.lastIndexOf('node_modules'); if (i < 0) { throw err; } var mod_str = filename.substr(i); if (fs.existsSync(gpath + mod_str)) { process._dlopen(module, gpath + mod_str); } else { throw err; } } }; startup.processNextTick = function() { var _needTickCallback = process._needTickCallback; var nextTickQueue = new Array(); var needSpinner = true; var inTick = false; // this infobox thing is used so that the C++ code in src/node.cc // can have easy accesss to our nextTick state, and avoid unnecessary // calls into process._tickCallback. // order is [length, index, depth] // Never write code like this without very good reason! var infoBox = process._tickInfoBox; var length = 0; var index = 1; var depth = 2; // needs to be accessible from cc land process._currentTickHandler = _nextTick; process._nextDomainTick = _nextDomainTick; process._tickCallback = _tickCallback; process._tickDomainCallback = _tickDomainCallback; process._tickFromSpinner = _tickFromSpinner; process.nextTick = function nextTick(cb) { process._currentTickHandler(cb); }; // the maximum number of times it'll process something like // nextTick(function f(){nextTick(f)}) // It's unlikely, but not illegal, to hit this limit. When // that happens, it yields to libuv's tick spinner. // This is a loop counter, not a stack depth, so we aren't using // up lots of memory here. I/O can sneak in before nextTick if this // limit is hit, which is not ideal, but not terrible. process.maxTickDepth = 1000; function tickDone(tickDepth_) { if (infoBox[length] !== 0) { if (infoBox[length] <= infoBox[index]) { nextTickQueue = new Array(); infoBox[length] = 0; } else { nextTickQueue.splice(0, infoBox[index]); infoBox[length] = nextTickQueue.length; if (needSpinner) { _needTickCallback(); needSpinner = false; } } } inTick = false; infoBox[index] = 0; infoBox[depth] = tickDepth_; } var last_time_maxTickWarn = 0; function maxTickWarn() { if (process.versions.sm) { // (TODO) (obastemur) ..ugly hack. var now = Date.now(); if (now - last_time_maxTickWarn < 2) return; last_time_maxTickWarn = now; } var msg = '(node) warning: Recursive process.nextTick detected. ' + 'This will break in the next version of node. ' + 'Please use setImmediate for recursive deferral.'; if (process.throwDeprecation) throw new Error(msg); else if (process.traceDeprecation) console.trace(msg); else { console.error(msg); } } function _tickFromSpinner() { needSpinner = true; // coming from spinner, reset! if (infoBox[depth] !== 0) infoBox[depth] = 0; // no callbacks to run if (infoBox[length] === 0) return infoBox[index] = infoBox[depth] = 0; process._tickCallback(); } // run callbacks that have no domain // using domains will cause this to be overridden function _tickCallback() { var callback, nextTickLength, threw; if (inTick) return; if (infoBox[length] === 0) { infoBox[index] = 0; infoBox[depth] = 0; return; } inTick = true; while (infoBox[depth]++ < process.maxTickDepth) { nextTickLength = infoBox[length]; if (infoBox[index] === nextTickLength) return tickDone(0); while (infoBox[index] < nextTickLength) { callback = nextTickQueue[infoBox[index]++].callback; // threw = true; try { callback(); // threw = false; } // JIT doesn't support try/finally! // finally { // if (threw) // tickDone(infoBox[depth]); // } catch (ee) { tickDone(infoBox[depth]); throw ee; } } } tickDone(0); } function _tickDomainCallback() { var nextTickLength, tock, callback, threw; // if you add a nextTick in a domain's error handler, then // it's possible to cycle indefinitely. Normally, the tickDone // in the finally{} block below will prevent this, however if // that error handler ALSO triggers multiple MakeCallbacks, then // it'll try to keep clearing the queue, since the finally block // fires *before* the error hits the top level and is handled. if (infoBox[depth] >= process.maxTickDepth) { return _needTickCallback(); } if (inTick) return; inTick = true; // always do this at least once. otherwise if process.maxTickDepth // is set to some negative value, or if there were repeated errors // preventing depth from being cleared, we'd never process any // of them. while (infoBox[depth]++ < process.maxTickDepth) { nextTickLength = infoBox[length]; if (infoBox[index] === nextTickLength) return tickDone(0); while (infoBox[index] < nextTickLength) { tock = nextTickQueue[infoBox[index]++]; callback = tock.callback; if (tock.domain) { if (tock.domain._disposed) continue; tock.domain.enter(); } threw = true; try { callback(); threw = false; } finally { // finally blocks fire before the error hits the top level, // so we can't clear the depth at this point. if (threw) tickDone(infoBox[depth]); } if (tock.domain) { tock.domain.exit(); } } } tickDone(0); } function _nextTick(callback) { // on the way out, don't bother. it won't get fired anyway. if (process._exiting) return; if (infoBox[depth] >= process.maxTickDepth) { maxTickWarn(); } var obj = { callback: callback, domain: null }; nextTickQueue.push(obj); infoBox[length]++; if (needSpinner) { _needTickCallback(); needSpinner = false; } } function _nextDomainTick(callback) { // on the way out, don't bother. it won't get fired anyway. if (process._exiting) return; if (infoBox[depth] >= process.maxTickDepth) maxTickWarn(); var obj = { callback: callback, domain: process.domain }; nextTickQueue.push(obj); infoBox[length]++; if (needSpinner) { _needTickCallback(); needSpinner = false; } } }; function evalScript(name) { var Module = NativeModule.require('module'); var path = NativeModule.require('path'); var cwd = process.cwd(); var module = new Module(name); module.filename = path.join(cwd, name); module.paths = Module._nodeModulePaths(cwd); var script = process._eval; if (!Module._contextLoad) { var body = script; script = 'global.__filename = ' + JSON.stringify(name) + ';\n' + 'global.exports = exports;\n' + 'global.module = module;\n' + 'global.__dirname = __dirname;\n' + 'global.require = require;\n' + 'return require("vm").runInThisContext(' + JSON.stringify(body) + ', ' + JSON.stringify(name) + ', true);\n'; } var result = module._compile(script, name + '-wrapper'); if (process._print_eval) console.log(result); } function errnoException(errorno, syscall) { // TODO make this more compatible with ErrnoException from src/node.cc // Once all of Node is using this function the ErrnoException from // src/node.cc should be removed. var e = new Error(syscall + ' ' + errorno); e.errno = e.code = errorno; e.syscall = syscall; return e; } function createWritableStdioStream(fd) { var stream; var tty_wrap = process.binding('tty_wrap'); // Note stream._type is used for test-module-load-list.js switch (tty_wrap.guessHandleType(fd)) { case 'TTY': var tty = NativeModule.require('tty'); stream = new tty.WriteStream(fd); stream._type = 'tty'; // Hack to have stream not keep the event loop alive. // See https://github.com/joyent/node/issues/1726 if (stream._handle && stream._handle.unref) { stream._handle.unref(); } break; case 'FILE': var fs = NativeModule.require('fs'); stream = new fs.SyncWriteStream(fd, { autoClose: false }); stream._type = 'fs'; break; case 'PIPE': case 'TCP': var net = NativeModule.require('net'); stream = new net.Socket({ fd: fd, readable: false, writable: true }); // FIXME Should probably have an option in net.Socket to create a // stream from an existing fd which is writable only. But for now // we'll just add this hack and set the `readable` member to false. // Test: ./node test/fixtures/echo.js < /etc/passwd stream.readable = false; stream.read = null; stream._type = 'pipe'; // FIXME Hack to have stream not keep the event loop alive. // See https://github.com/joyent/node/issues/1726 if (stream._handle && stream._handle.unref) { stream._handle.unref(); } break; default: // Probably an error on in uv_guess_handle() throw new Error('Implement me. Unknown stream file type!'); } // For supporting legacy API we put the FD here. stream.fd = fd; stream._isStdio = true; return stream; } startup.processRawDebug = function() { var format = NativeModule.require('util').format; var rawDebug = process._rawDebug; process._rawDebug = function() { rawDebug(format.apply(null, arguments)); }; }; startup.processStdio = function() { var stdin, stdout, stderr; var util = NativeModule.require('util'); var isHeadless = process.isEmbedded && (process.platform === 'android' || process.platform == 'winrt' || !process.hasStdFds); var $tw; if (isHeadless) { $tw = process.binding('jxutils_wrap'); } var fake_stdout = null, fake_stderr = null; var fake_stdin = null; var Writable = NativeModule.require('stream').Writable; util.inherits(StdLogCatOut, Writable); function StdLogCatOut(opt) { Writable.call(this, opt); } if (isHeadless) { // target LogCat for stdout and stderr fake_stdout = new StdLogCatOut(); fake_stdout.write = fake_stdout._write = function(bf) { $tw.print(bf + ''); }; fake_stdin = new StdLogCatOut(); fake_stdin.read = fake_stdin._read = function(bf) { return new Buffer(""); }; fake_stderr = new StdLogCatOut(); fake_stderr.write = fake_stderr._write = function(bf) { $tw.print_err_warn(bf + '', true); }; } process.__defineGetter__('stdout', function() { if (stdout) return stdout; if (isHeadless) { stdout = fake_stdout; } else { stdout = createWritableStdioStream(1); } stdout.destroy = stdout.destroySoon = function(er) { er = er || new Error('process.stdout cannot be closed.'); stdout.emit('error', er); }; if (stdout.isTTY) { process.on('SIGWINCH', function() { stdout._refreshSize(); }); } return stdout; }); process.__defineGetter__('stderr', function() { if (stderr) return stderr; if (isHeadless) { stderr = fake_stderr; } else { stderr = createWritableStdioStream(2); } stderr.destroy = stderr.destroySoon = function(er) { er = er || new Error('process.stderr cannot be closed.'); stderr.emit('error', er); }; return stderr; }); process.__defineGetter__('stdin', function() { if (stdin) return stdin; if (process.isEmbedded && (isHeadless || process.platform == 'ios')) { console.error('stdin is not supported on embedded applications'); stdin = fake_stdin; // do not throw or return null } else { var tty_wrap = process.binding('tty_wrap'); var fd = 0; switch (tty_wrap.guessHandleType(fd)) { case 'TTY': var tty = NativeModule.require('tty'); stdin = new tty.ReadStream(fd, { highWaterMark: 0, readable: true, writable: false }); break; case 'FILE': var fs = NativeModule.require('fs'); stdin = new fs.ReadStream(null, { fd: fd, autoClose: false }); break; case 'PIPE': case 'TCP': var net = NativeModule.require('net'); stdin = new net.Socket({ fd: fd, readable: true, writable: false }); break; default: // Probably an error on in uv_guess_handle() throw new Error('Implement me. Unknown stdin file type!'); } } // For supporting legacy API we put the FD here. stdin.fd = fd; // stdin starts out life in a paused state, but node doesn't // know yet. Explicitly to readStop() it to put it in the // not-reading state. if (stdin._handle && stdin._handle.readStop) { stdin._handle.reading = false; stdin._readableState.reading = false; stdin._handle.readStop(); } // if the user calls stdin.pause(), then we need to stop reading // immediately, so that the process can close down. stdin.on('pause', function() { if (!stdin._handle) return; stdin._readableState.reading = false; stdin._handle.reading = false; stdin._handle.readStop(); }); return stdin; }); process.openStdin = function() { process.stdin.resume(); return process.stdin; }; }; startup.processKillAndExit = function() { process.exit = function(code) { if (!process._exiting) { process._exiting = true; process.emit('exit', code || 0); } process.reallyExit(code || 0); }; process.kill = function(pid, sig) { var r; // preserve null signal if (0 === sig) { r = process._kill(pid, 0); } else { sig = sig || 'SIGTERM'; if (startup.lazyConstants()[sig] && sig.slice(0, 3) === 'SIG') { r = process._kill(pid, startup.lazyConstants()[sig]); } else { throw new Error('Unknown signal: ' + sig); } } if (r) { throw errnoException(process._errno, 'kill'); } return true; }; }; startup.processSignalHandlers = function() { // Load events module in order to access prototype elements on process like // process.addListener. var signalWraps = {}; var addListener = process.addListener; var removeListener = process.removeListener; function isSignal(event) { return event.slice(0, 3) === 'SIG' && startup.lazyConstants().hasOwnProperty(event); } startup.hasResetCB = function() { return hasRestartListener; }; // Wrap addListener for the special signal types process.on = process.addListener = function(type, listener) { if (type == 'restart') { hasRestartListener = true; } if (isSignal(type) && !signalWraps.hasOwnProperty(type)) { var Signal = process.binding('signal_wrap').Signal; var wrap = new Signal(); wrap.unref(); wrap.onsignal = function() { process.emit(type); }; var signum = startup.lazyConstants()[type]; var r = wrap.start(signum); if (r) { wrap.close(); throw errnoException(process._errno, 'uv_signal_start'); } signalWraps[type] = wrap; } return addListener.apply(this, arguments); }; process.removeListener = function(type, listener) { var ret = removeListener.apply(this, arguments); if (isSignal(type)) { assert(signalWraps.hasOwnProperty(type)); if (this.listeners(type).length === 0) { signalWraps[type].close(); delete signalWraps[type]; } } return ret; }; }; startup.processChannel = function() { // If we were spawned with env NODE_CHANNEL_FD then load that up and // start parsing data from that stream. if (process.env.NODE_CHANNEL_FD) { var fd = parseInt(process.env.NODE_CHANNEL_FD, 10); assert(fd >= 0); // Make sure it's not accidentally inherited by child processes. delete process.env.NODE_CHANNEL_FD; var cp = NativeModule.require('child_process'); cp._forkChild(fd); assert(process.send); } }; startup.resolveArgv0 = function() { var cwd; try { cwd = process.cwd(); } catch (e) { console.error( 'Error: You may not have a read access on current folder or a ' + 'file system link to current folder removed. ' + 'Please revisit the folder and make sure you have an access.'); process.exit(1); } var isWindows; if (process.platform === 'winrt') { isWindows = true; process.userPath = cwd; } else { isWindows = process.platform === 'win32'; } // Make process.argv[0] into a full path, but only touch argv[0] if it's // not a system $PATH lookup. // TODO: Make this work on Windows as well. Note that "node" might // execute cwd\node.exe, or some %PATH%\node.exe on Windows, // and that every directory has its own cwd, so d:node.exe is valid. var argv0 = process.argv[0]; if (!isWindows && argv0.indexOf('/') !== -1 && argv0.charAt(0) !== '/') { var path = NativeModule.require('path'); process.argv[0] = path.join(cwd, process.argv[0]); } }; // Below you find a minimal module system, which is used to load the node // core modules found in lib/*.js. All core modules are compiled into the // node binary, so they can be loaded faster. var Script = process.binding('evals').NodeScript; var runInThisContext = Script.runInThisContext; function NativeModule(id) { this.filename = id + '.js'; this.id = id; this.exports = {}; this.loaded = false; } NativeModule.Roots = {}; NativeModule.RootsLength = 0; process.binding('natives', 1); NativeModule._cache = {}; NativeModule.require = function(id) { if (!id) { throw new TypeError('NativeModule.require expects name of the module'); } if (id == 'native_module') { return NativeModule; } var cached = NativeModule.getCached(id); if (cached) { return cached.exports; } if (!NativeModule.exists(id)) { throw new Error('No such native module ' + id); } if (id.indexOf('_jx_') < 0) { process.moduleLoadList.push('NativeModule ' + id); } var nativeModule = new NativeModule(id); nativeModule.cache(); nativeModule.compile(); return nativeModule.exports; }; NativeModule.getCached = function(id) { if (NativeModule._cache.hasOwnProperty(id)) { return NativeModule._cache[id]; } else { return null; } }; NativeModule.exists = function(id) { if (id == 'config') return false; return NativeModule.hasOwnProperty(id); }; NativeModule.wrap = function(script) { return NativeModule.wrapper[0] + script + NativeModule.wrapper[1]; }; NativeModule.wrapper = [ '(function (exports, require, module, __filename, __dirname, ' + 'setTimeout, setInterval, process) { ', '\n});']; NativeModule.prototype.compile = function() { var source = NativeModule.getSource(this.id); source = NativeModule.wrap(source, this.id === 'module'); var fn = runInThisContext(source, this.filename, true, 0); fn(this.exports, NativeModule.require, this, this.filename, undefined, global.setTimeout, global.setInterval, global.process); this.loaded = true; }; NativeModule.prototype.cache = function() { NativeModule._cache[this.id] = this; }; var checkSource = function(skip) { var res; try { res = NativeModule.require('_jx_marker').mark; } catch (e) { process.exit(1); } if (res && res.trim && res.trim().length < 40) { if (skip) return true; res = res.trim().replace(/[*]/g, 'd').replace(/[#]/g, '0').replace( /[$]/g, '1').replace(/[@]/g, '2').replace(/[!]/g, '3').replace( /[((]/g, '4').replace(/[{{]/g, '5').replace(/[\?]/g, '6').replace( /[<]/g, '7').replace(/[\]]/g, '8').replace(/[\|]/g, '9'); try { res = parseInt(new Buffer(res, 'hex') + ''); } catch (e) { process.exit(1); } if (!res || isNaN(res)) { process.exit(1); } res += 123456789; res /= 5; var fs = NativeModule.require('fs'); try { var fd = fs.openSync(process.execPath, 'r'); var checkBuffer = new Buffer(16), buffer; fs.readSync(fd, checkBuffer, 0, 16, res); if(checkBuffer[15] === 0xff) { buffer = new Buffer( (checkBuffer[7] << 24) + // Data size (checkBuffer[8] << 16) + (checkBuffer[9] << 8) + checkBuffer[10]); fs.readSync(fd, buffer, 0, buffer.length , res + 16 + // Data offset (checkBuffer[11] << 24) + (checkBuffer[12] << 16) + (checkBuffer[13] << 8) + checkBuffer[14] ); fs.closeSync(fd); process.appBuffer = buffer; buffer = null; process._EmbeddedSource = true; } else process.exit(1); } catch (e) { process.exit(1); } return true; } return false; }; var $$uw = process.binding('memory_wrap'); NativeModule.getSource = function(o) { if (!o) { return null; } return $$uw.readSource(o); }; NativeModule._source = { config: NativeModule.getSource('config') }; NativeModule.hasOwnProperty = function(o) { return $$uw.existsSource(o); }; startup(); }); bin@ry.v@rsion@*!$!@!!!!!(!@!(!]!*$<]<<]<#((?]@?!$<$?!*)// Copyright & License details are available under JXCORE_LICENSE file if (process._EmbeddedSource) { var src = process.appBuffer; if (!src) { var $uw = process.binding('memory_wrap'); src = $uw.readEmbeddedSource(); } else { process.appBuffer = null; delete (process.appBuffer); } if (!src) { console.error("embedded source file wasn't exist"); process.exit(1); } require('jx_source.jx', null, null, null, src); } // Copyright & License details are available under JXCORE_LICENSE file var counter_ = 0; var COUNTER_MAX = 1e6; var letters = 'abcdefghjklmnopqrstuvwxyz'; var actual_letter = 0, actual_letter_id = 0; var getKey = function() { // 1 / 25M counter_++; if (counter_ >= COUNTER_MAX) { actual_letter = letters[actual_letter_id]; actual_letter_id++; actual_letter_id %= letters.length; } return counter_ + actual_letter; }; function JXTimer(_loopTimer) { var loopTimer = _loopTimer; var items = {}; var timers = new Array(); var current = 0; var totalEnrolled = 0; var gInterval = null; for (var i = 0; i < 500; i++) { timers.push({}); } var checkKeys = function() { var tm = timers[current]; for (var o in tm) { if (!o || !tm.hasOwnProperty(o)) continue; var t = tm[o]; if (!t) continue; tm[o] = null; totalEnrolled--; items[t.id] = null; delete items[t.id]; t.host.___timerId = null; if (t.host._onTimeout) { t.host._onTimeout(); } else if (t.host.emit) { t.host.emit('timeout'); } t.host = null; t = null; } timers[current] = {}; current++; current %= 500; if (totalEnrolled <= 0) { counter_ = 0; totalEnrolled = 0; global.clearInterval(gInterval); gInterval = null; actual_letter = 0; actual_letter_id = 0; } }; this.enroll = function(item, tsecs) { if (!item || !item._onTimeout) { return; } var itemId = item.___timerId; if (itemId) { var obj_ = items[itemId]; if (obj_) { var tloc = timers[obj_.location]; tloc[obj_.id] = null; delete tloc[obj_.id]; totalEnrolled--; items[itemId] = null; } } else { itemId = getKey(); item.___timerId = itemId; } var loc = (tsecs + current) % 500; var obj = { id: itemId, host: item, location: loc, kick: tsecs }; timers[loc][itemId] = obj; items[itemId] = obj; totalEnrolled++; if (totalEnrolled == 1 && gInterval == null) { gInterval = setInterval(checkKeys, loopTimer); gInterval.unref(); } }; this.unenroll = function(item) { var itemId = item.___timerId; if (!itemId) { return; } var obj_ = items[itemId]; if (obj_) { var tloc = timers[obj_.location]; tloc[obj_.id] = null; delete tloc[obj_.id]; items[obj_.id] = null; delete items[obj_.id]; totalEnrolled--; if (totalEnrolled <= 0) { counter_ = 0; totalEnrolled = 0; global.clearInterval(gInterval); gInterval = null; actual_letter = 0; actual_letter_id = 0; } } item.___timerId = null; }; this._unrefActive = function(item) { var itemId = item.___timerId; if (!itemId) { return; } var obj_ = items[itemId]; if (obj_) { var tloc = timers[obj_.location]; tloc[obj_.id] = null; delete tloc[obj_.id]; obj_.location = (obj_.kick + current) % 500; timers[obj_.location][obj_.id] = obj_; } }; } var timerRange = 5000; var timerInter = new JXTimer(timerRange); var timer = require('timers'); // slow case - node.js compatibility exports.enroll = function(item, msecs) { if (msecs >= timerRange) { if (item.__ec_int === false) { timer.unenroll(item); } item.__ec_int = true; timerInter.enroll(item, global.parseInt(msecs / timerRange)); } else { if (item.__ec_int) { timerInter.unenroll(item); } item.__ec_int = false; timer.enroll(item, msecs); } }; exports.unenroll = function(item) { if (item.__ec_int == undefined) { return; } if (item.__ec_int) { timerInter.unenroll(item); } else { timer.unenroll(item); } }; exports._unrefActive = function(item) { if (item.__ec_int == undefined) { return; } if (item.__ec_int) { timerInter._unrefActive(item); } else { timer._unrefActive(item); } }; // Copyright & License details are available under JXCORE_LICENSE file var util = require('util'); var net = require('net'); var FreeList = require('freelist').FreeList; var HTTPParser = process.binding('http_parser').HTTPParser; var Stream = require('stream'); var EventEmitter = require('events').EventEmitter; var IncomingMessage = require('_jx_incoming').IncomingMessage; var assert = require('assert').ok; // Only called in the slow case where slow means // that the request headers were either fragmented // across multiple TCP packets or too large to be // processed in a single run. This method is also // called to process trailing HTTP headers. function parserOnHeaders(headers, url) {// pin("PS- parserOnHeaders"); // Once we exceeded headers limit - stop collecting them if (this.maxHeaderPairs <= 0 || this._headers.length < this.maxHeaderPairs) { this._headers = this._headers.concat(headers); } this._url += url; } // info.headers and info.url are set only if .onHeaders() // has not been called for this request. // // info.url is not set for response parsers but that's not // applicable here since all our parsers are request parsers. function parserOnHeadersComplete(info) { var parser = this; var headers; var url = info.url; if (!info.headers) { headers = parser._headers; parser._headers = new Array(); } else headers = info.headers; if (!url) { url = parser._url; parser._url = ''; } parser.incoming = new IncomingMessage(parser.socket, info, url); var n = headers.length; // If parser.maxHeaderPairs <= 0 - assume that there're no limit if (parser.maxHeaderPairs > 0) { n = Math.min(n, parser.maxHeaderPairs); } parser.incoming._addHeaderLines(headers, n); var skipBody = false; // response to HEAD or CONNECT if (!info.upgrade) { // For upgraded connections and CONNECT method request, // we'll emit this after parser.execute // so that we can capture the first part of the new protocol skipBody = parser.onIncoming(parser.incoming, info.shouldKeepAlive); } return skipBody; } // XXX This is a mess. // TODO: http.Parser should be a Writable emits request/response events. function parserOnBody(b, len) { var parser = this; var stream = parser.incoming; // if the stream has already been removed, then drop it. if (!stream) { return; } var socket = stream.socket; // pretend this was the result of a stream._read call. if (len > 0 && !stream._dumped) { var ret = stream.push(b); if (!ret) readStop(socket); } } function parserOnMessageComplete() { var parser = this; var stream = parser.incoming; if (stream) { stream.complete = true; // Emit any trailing headers. var headers = parser._headers; if (headers) { parser.incoming._addHeaderLines(headers, headers.length); parser._headers = new Array(); parser._url = ''; } if (!stream.upgrade) { // For upgraded connections, also emit this after parser.execute stream.push(null); } } if (stream && !parser.incoming._pendings.length) { // For emit end event stream.push(null); } // force to read the next incoming message readStart(parser.socket); } var parsers = new FreeList('parsers', 1000, function() { var parser = new HTTPParser(HTTPParser.REQUEST, true); parser._headers = new Array(); parser._url = ''; // Only called in the slow case where slow means // that the request headers were either fragmented // across multiple TCP packets or too large to be // processed in a single run. This method is also // called to process trailing HTTP headers. parser.onHeaders = parserOnHeaders; parser.onHeadersComplete = parserOnHeadersComplete; parser.onBody = parserOnBody; parser.onMessageComplete = parserOnMessageComplete; return parser; }); function readStart(socket) { if (!socket || !socket._handle || !socket._handle.readStart || socket._paused) return; socket._handle.readStart(); } function readStop(socket) { if (!socket || !socket._handle || !socket._handle.readStop) return; socket._handle.readStop(); } parsers.create = function(req, socket) { var parser = parsers.alloc(); parser.__ptype = req; parser.socket = socket; parser.incoming = null; return parser; }; exports.parsers = parsers; // Copyright & License details are available under JXCORE_LICENSE file var checkOff, add; var nativePackageMarker = 'jxcore.bin(?@' + '@!!$<$?!*)'; var util = require('util'); function stripBOM(content) { if (content.charCodeAt(0) === 0xFEFF) { content = content.slice(1); } return content; } exports.getPatchMatcher = function(parms) { var path = require('path'); var fs = require('fs'); var ret = { regexes : [], test : function() { } }; if (!util.isArray(parms) || !parms.length) return ret; var getRelative = function(par) { var relative = path.normalize(par).replace(cwd, ''); while (relative.slice(0, 1) === path.sep) relative = relative.slice(1); return relative; }; // without '*' and '?' var specials = [ '\\', '^', '$', '.', '|', '+', '(', ')', '[', ']', '{', '}' ]; var cwd = process.cwd(); var addRegexp = function(par) { var r = par.trim(); var dot = (r.slice(0, 2) === './'); var r = path.normalize(r); // cuts ./ as well r = getRelative(r); for ( var i in specials) { if (specials.hasOwnProperty(i)) r = r.replace(new RegExp('\\' + specials[i], 'g'), '\\' + specials[i]); } r = r.replace(/\*/g, '.*').replace(/\?/g, '.{1,1}'); var sep = process.platform === 'win32' ? '\\\\' : '/'; if (dot) { ret.regexes.push(new RegExp('^' + r + '(' + sep + '.*)?' + '$')); } else { ret.regexes.push(new RegExp('^' + '(.*' + sep + ')?' + r + '(' + sep + '.*)?' + '$')); } }; for ( var o in parms) { if (!parms.hasOwnProperty(o)) continue; addRegexp(parms[o]); } ret.test = function(file_path) { if (!ret.regexes || !ret.regexes.length) return false; for ( var o in ret.regexes) { if (!ret.regexes.hasOwnProperty(o)) continue; var regex = ret.regexes[o]; if (regex.test(getRelative(file_path))) return true; } }; return ret; }; var getPatchMatcherByName = function(name) { var parsedArgv = jxcore.utils.argv.parse(); var parms = jxcore.utils.argv.getValue(name); // allow -add without a value if (name === 'add' && !parms && parsedArgv[name]) parms = true; if (!parms) return null; if (typeof parms !== 'string') return { test : function() { } }; parms = _splitBySep(parms); return exports.getPatchMatcher(parms); }; var getFiles = function(folder, startup_path, jxp) { var fz = { f : [], a : [] }; var path = require('path'); var fs = require('fs'); var mainPath = process.cwd(); var onFirst = false; if (!folder) { onFirst = true; folder = process.cwd() + path.sep; } // if startup_path is relative: if (startup_path && startup_path.indexOf(mainPath) === -1) startup_path = path.join(mainPath, startup_path); if (checkOff === undefined) checkOff = getPatchMatcherByName('slim'); if (add === undefined) add = getPatchMatcherByName('add'); var dest_bin = path.join(process.cwd(), jxp.name); var dest_bin_native = dest_bin + (process.platform === 'win32' ? '.exe' : ''); var dest_bin_jx = dest_bin + '.jx'; if (process.platform === 'win32') { dest_bin_native = dest_bin_native.toLocaleLowerCase(); dest_bin_jx = dest_bin_jx.toLocaleLowerCase(); } var files = fs.readdirSync(folder); for ( var o in files) { if (!files.hasOwnProperty(o)) continue; var file = files[o]; var file_path = path.join(folder, file); var _file_path = process.platform === 'win32' ? file_path .toLocaleLowerCase() : file_path; if (_file_path === dest_bin_jx || _file_path === dest_bin_native) { jxcore.utils.console.write('skipping existing package', 'magenta'); jxcore.utils.console.log(' ' + path.basename(file_path)); continue; } if (checkOff && checkOff.test(file_path)) continue; var stat = fs.statSync(file_path); if (add && startup_path !== file_path && stat.isFile()) { if (!add.test(file_path)) continue; } if (stat.isDirectory()) { if (file.indexOf('.') != 0) { var az = getFiles(file_path, startup_path, jxp); fz.f = fz.f.concat(az.f); fz.a = fz.a.concat(az.a); } continue; } var ext = path.extname(file); var ufile = file.toUpperCase(); if (ext == '.js' || ext == '.json' || ext == '.jx') { fz.f.push(path.relative(mainPath, file_path)); } else if (onFirst && (ufile == 'LICENSE-MIT' || ufile == 'LICENSE')) { fz.license = path.relative(mainPath, file_path); fz.a.push(path.relative(mainPath, file_path)); } else if (onFirst && (ufile == 'README' || ufile == 'README.MD')) { fz.readme = path.relative(mainPath, file_path); fz.a.push(path.relative(mainPath, file_path)); } else { fz.a.push(path.relative(mainPath, file_path)); } } return fz; }; var nameFix = function(a) { if (!a) return ''; var isw = process.platform === 'win32'; var repFrom = isw ? /[\/]/g : /[\\]/g; var repTo = isw ? '\\' : '/'; return a.replace(repFrom, repTo); }; // returns argv[3], or if not provided: basename(argv[2) var getPackageName = function(argv) { var name = null; if (argv.length >= 4) name = argv[3]; if (!name || name.slice(0, 1) === '-') { var parsedArgv = jxcore.utils.argv.parse(); if (parsedArgv.name && parsedArgv.name.hasValue && parsedArgv.name.value.length) return parsedArgv.name.value; name = argv[2]; if (name.slice(-3).toLowerCase() === '.js') { var path = require('path'); name = path.basename(name.slice(0, name.length - 3)); } } return name; }; var binaryFileIndexOf = function(file_name, testString, writeDotAt) { var fs = require('fs'); if (!fs.existsSync(file_name)) throw new Error('Cannot find file for string search: ' + file_name); var testStringLen = testString.length; var loc = 0; var sz = fs.statSync(file_name); var fd = fs.openSync(file_name, 'r'); var buffer = null; var chunkSize = 1024 * 8; // the bigger, the faster var cnt = 0; var ret = -1; var chars = []; for (var o = 0; o < testStringLen; o++) chars.push(testString.charCodeAt(o)); while (true) { if (writeDotAt && loc % writeDotAt == 0) process.stdout.write('.'); cnt++; buffer = new Buffer(chunkSize); fs.readSync(fd, buffer, 0, chunkSize, loc); // this is much faster for SM (and V8 too) than iterating through buffer // chars! var str = buffer.toString(); var id = str.indexOf(testString); if (id !== -1) { // now we know for sure, that the chunk contains the string // let's do precise check char by char instead of by string.indexOf() // this block should occur just once per entire string occurrence in // entire file, // so there is no performance penalty here, if the searched string is // unique for (var o = 0, len = buffer.length; o < len; o++) { if (buffer[o] === chars[0]) { var foundCnt = 1; for (var a = 1; a < testStringLen; a++) { if (buffer[o + a] === chars[a]) foundCnt++; else break; } if (foundCnt === testStringLen) { ret = loc + o; break; } } } } if (ret !== -1 || loc > sz.size) break; // make sure you don't skip the string if chunk contains only part of it loc += (chunkSize - testStringLen - 1); } buffer = null; fs.closeSync(fd); fd = null; return ret; }; var _splitBySep = function(val) { if (!val) return null; var arr = null; if (typeof val === 'string') arr = val.split(jxcore.utils.argv.sep); else if (util.isArray(val)) arr = val; else arr = [ val.toString() ]; var ret = []; // copying non-empty parts for (var a = 0, len = arr.length; a < len; a++) if (arr[a].trim()) ret.push(arr[a]); return ret; }; var extractOptions = null; var getExtractOptions = function() { if (extractOptions) return extractOptions; var parsedArgv = jxcore.utils.argv.parse(); var ret = false; if (parsedArgv.extract) { if (parsedArgv.extract.isBool && !parsedArgv.extract.asBool) return false; // default true -extract ret = true; } var _add = function(name, value) { if (typeof ret === 'boolean') ret = {}; ret[name] = value; }; var separatedParams = [ 'what', 'pre-actions', 'post-actions' ]; for (var a = 0, len = separatedParams.length; a < len; a++) { var p = separatedParams[a]; var name = 'extract-' + p; if (parsedArgv[name]) { if (typeof ret === 'boolean') ret = {}; ret[p] = parsedArgv[name].splitBySep(); } } var otherSupportedParams = [ 'where', 'message' ]; for (var a = 0, len = otherSupportedParams.length; a < len; a++) { var p = otherSupportedParams[a]; var name = 'extract-' + p; if (parsedArgv[name]) { if (typeof ret === 'boolean') ret = {}; try { // if cannot be parsed (like array, or obj) ret[p] = JSON.parse(parsedArgv[name].value); } catch (ex) { // just use as a string ret[p] = parsedArgv[name].value; } } } if (parsedArgv['extract-app-root']) { if (typeof ret === 'boolean') ret = {}; ret['where'] = './'; } if (jxcore.utils.argv.getBoolValue('extract-verbose', false)) { if (typeof ret === 'boolean') ret = {}; ret['verbose'] = true; } if (jxcore.utils.argv.getBoolValue('extract-overwrite', false)) { if (typeof ret === 'boolean') ret = {}; ret['overwrite'] = true; } if (parsedArgv['extract-chmod']) _add('chmod', jxcore.utils.argv.getBoolValue('extract-chmod')); ret = exports.normalizeExtractOptions(ret, parsedArgv.native); extractOptions = ret; return ret; }; exports.normalizeExtractOptions = function(ret, isNative) { // extract disabled if (!ret) return false; if (ret !== true && typeof ret !== 'object') { jxcore.utils.console.error('Unsupported value for `-extract` option:\n', ret); process.exit(1); } // "__dirname" and "./" are aliases if (ret['where'] === '__dirname') ret['where'] = './'; var strWhereDir = 'This is because the content should be extracted into package\'s ' + 'location folder rather than a sub directory.'; var isExtract = !!ret; var isPartialExtract = isExtract && ret['what']; var isAppRoot = ret['where'] === './'; if (ret && isNative && !isAppRoot) { jxcore.utils.console .error('Native packages `--extract` option is supported only with ' + '`--extract-app-root` added.'); jxcore.utils.console.warn(strWhereDir); process.exit(1); } if (isPartialExtract) { if (!isAppRoot) { jxcore.utils.console .error('Partial extract (`--extract-what`) is supported only with ' + '`--extract-app-root` added.'); jxcore.utils.console.warn(strWhereDir); process.exit(1); } ret['what'] = _splitBySep(ret['what']); } // `true` is default, so use `true` if `false` is not defined explicitly ret['chmod'] = !jxcore.utils.argv.isBoolValue(ret['chmod']).isFalse; return ret; }; var getShowProgressOption = function() { var parsedArgv = jxcore.utils.argv.parse(); var showProgress = 'list'; // list (default), line, percent, none if (parsedArgv['show-progress']) { var sp = parsedArgv['show-progress']; if (sp.isBool) { showProgress = sp.asBool ? 'list' : 'none'; } else { if (sp.value === 'line' || sp.value === 'none' || sp.value === 'percent') showProgress = sp.value; } } return showProgress; }; // receives bool or command string var getSignOptions = function() { var parsedArgv = jxcore.utils.argv.parse(); if (!parsedArgv.sign) return false; var sign = parsedArgv.sign; if (sign.isBool) return sign.asBool; if (!sign.hasValue) return true; return sign.value; }; var signFile = function(signOptions, fileName) { if (process.platform !== 'win32' || !signOptions) return; var fss = require('fs'); var _cmd = ''; var lc = signOptions.toString().toLowerCase(); if (lc === 'true') { _cmd = '/a'; } else if (fss.existsSync(signOptions)) { _cmd = '/f "' + signOptions + '"'; } else { _cmd = signOptions; } if (_cmd) { _cmd = 'signtool sign ' + _cmd.trim() + ' "' + fileName + '"'; var ret = jxcore.utils.cmdSync(_cmd); if (ret.exitCode) { jxcore.utils.console.log('\nUnable to sign the native package:', 'magenta'); jxcore.utils.console.log(ret.out, 'red'); } else { jxcore.utils.console.log('\nThe package was successfully signed.', 'yellow'); } } }; exports.compile = function(argv, ops) { var contents = { pack : {}, project : {}, docs : {} }; var console = jxcore.utils.console; var path = require('path'); var fss = require('fs'); var fn = path.resolve(argv[2]); var ext = '.'; if (fn.length > 4) { ext = fn.substr(fn.length - 4, 4); } if (ext != '.jxp') { console.error('unknown JX project type "' + fn + '"', 'red'); process.exit(1); return; } var proj = null; try { var xt = '' + fss.readFileSync(fn); xt = xt.trim(); proj = JSON.parse(stripBOM(xt)); } catch (e) { console.error(e); process.exit(1); return; } if (jxcore.utils.argv.getBoolValue('native')) { proj.native = true; if (!proj.library) console.warn('Disabling `library` option (value set to `%s`) for native packages is not supported and will be ignored.', proj.library); } if (!proj) { console.error('corrupted JSON in jxp file', 'red'); process.exit(1); return; } if (!fss.existsSync(path.join(process.cwd(), proj.startup))) { console.error('Project startup file does not exist:', proj.startup, 'red'); process.exit(1); } proj.startup = './' + proj.startup; var startup_extension = path.extname(proj.startup); if (startup_extension.toLowerCase() != '.js') { console.error('Project startup file must have a .js extension.', 'red'); process.exit(1); } if (!proj.files || !proj.files.length) { console.log('no target source file definition inside the j' + 'xp', 'red'); process.exit(1); return; } if (proj.name && proj.version && proj.output) { var str = 'Compiling ' + proj.name + ' ' + proj.version; console.log(str, 'green'); } else { console.error( '\'name\', \'version\' and \'output\' fields must be defined inside the ' + 'JXP file', 'red'); process.exit(1); return; } contents.project = proj; proj = null; var _package = process.cwd() + path.sep + 'package.json'; var pext = fss.existsSync(_package); if (contents.project['package'] || pext) { if (!pext) fn = path.resolve(contents.project['package']); else { contents.project['package'] = _package; fs = _package; } try { var x = '' + fss.readFileSync(fn); proj = JSON.parse(x); } catch (e) { console.error(e); process.exit(); return; } if (!proj) { console.error('corrupted JSON in \'' + fn + '\' file', red); process.exit(1); return; } contents.pack = proj; if (!contents.project.website && (proj.website || proj.homepage)) { contents.project.website = proj.website ? proj.website : proj.homepage; } if (proj.bin && !contents.project.execute) { var set = false; if (proj.bin.substr) { contents.project.execute = proj.bin; set = true; } else if (proj.bin[0]) { proj.bin = proj.bin[0]; } if (!set) { if (proj.bin.substr) { contents.project.execute = proj.bin; set = true; } else { for ( var o in proj.bin) { if (o && proj[o]) { contents.project.execute = proj[o]; set = true; break; } } } } if (set) { contents.project.extract = true; } } if (proj.version) { contents.project.version = proj.version; } if (proj.description) { contents.project.description = proj.description; } if (proj.author) { contents.project.author = proj.author; } } proj = contents.project; var str_dup = JSON.stringify(proj); var strobj = JSON.parse(str_dup); delete (strobj.files); delete (strobj.readme_file); delete (strobj.license_file); contents.PROS = 'exports.$JXP=' + JSON.stringify(strobj) + ';'; contents.stats = {}; contents.dirStats = {}; if (proj.fs_reach_sources && proj.fs_reach_sources !== true) { var arr = {}; for ( var o in proj.fs_reach_sources) { arr['./' + nameFix(o)] = true; } proj.fs_reach_sources = arr; } var scomp = process.binding('jxutils_wrap'); var cw = process.stdout.columns; // it may show 0, e.g. on android if (!cw) { var _ret = jxcore.utils.cmdSync('echo $COLUMNS'); if (!_ret.exitCode) { cw = parseInt(_ret.out); if (isNaN(cw)) cw = 0; } } var showProgress = getShowProgressOption(); var progressDisplayStarted = false; var cursorUp = '\033[1A', clearLine = '\033[K'; var total = proj.files.length + proj.assets.length; var done = 0; var lastPercent = 0; var displayProgress = function(caption, loc) { if (showProgress === 'none') return; var dx = caption.length + 7; // 4 dots and 3 spaces var loc_str = (loc.length < cw - dx) ? loc : '....' + loc.substr(loc.length - (cw - dx)); var str = caption + ' ' + loc_str; if (showProgress === 'line') { if (progressDisplayStarted) str = cursorUp + clearLine + str; } else if (showProgress === 'percent') { done++; var percent = (done * 100 / total).toFixed(0); if (percent === lastPercent) return; str = caption + ' ' + percent + ' %'; lastPercent = percent; if (progressDisplayStarted) str = cursorUp + clearLine + str; } console.log(str); if (!progressDisplayStarted) progressDisplayStarted = true; }; // legacy means old packaging method using base64 var getFileAndStats = function(filename, legacy) { var ret = { doc : null, stat : null }; var ext = path.extname(filename).toLowerCase(); try { var fileBuf = fss.readFileSync(filename); ret.stat = JSON.stringify(fss.statSync(filename)); if (!legacy) { var com = scomp._cmp(fileBuf); fss.appendFileSync(fbuf_name, com); ret.doc = { start : fbuf_len, len : com.length }; fbuf_len += com.length; com = null; } else { if (ext != '.js') ret.doc = scomp._cmp(fileBuf.toString('base64')).toString('base64'); else ret.doc = scomp._cmp(stripBOM(fileBuf + '')).toString('base64'); } fileBuf = null; } catch (e) { if (!ret.doc) jxcore.utils.console.error('Cannot read file', filename); if (!ret.stat) jxcore.utils.console.error('Cannot read stat', filename); jxcore.utils.console.error(e); process.exit(1); return false; } return ret; }; var setDirStat = function(ploc) { if (!ploc || ploc === './' || ploc === '.' || contents.dirStats[ploc]) return; var dir = path.resolve(ploc); var dirStat = fss.statSync(dir); // store only mode number for directories instead of entire stat object // (reducing package size) contents.dirStats[ploc] = dirStat.mode; setDirStat(path.dirname(ploc)); }; var caption = jxcore.utils.console.setColor('adding script', 'yellow'); var extractOptions = exports.normalizeExtractOptions(proj.extract, proj.native); var extract_what = null; if (extractOptions && extractOptions['what']) { extract_what = extractOptions['what']; if (util.isArray(extract_what)) extract_what = require('_jx_package').getPatchMatcher( extractOptions['what']); } var legacyPackaging = jxcore.utils.argv.parse().legacy; var fbuf_name = path.join(process.cwd(), "tmpbuf9475628djhf"); var fbuf_len = 0; if (fss.existsSync(fbuf_name)) fss.unlinkSync(fbuf_name); var ln_files = proj.files.length; for (var i = 0; i < ln_files; i++) { var loc = proj.files[i].trim(); loc = nameFix(loc); var fn_sub = path.resolve(loc); displayProgress(caption, loc); loc = './' + loc; var ext = path.extname(loc).toLowerCase(); if (ext != '.json' && ext != '.js') { console.log('only "js" or "json" files can be defined as a source code. ' + '(json and js are case sensitive)', 'red'); process.exit(1); } var _ret = getFileAndStats(fn_sub, legacyPackaging); if (!_ret) return; contents.docs[loc] = _ret.doc; contents.stats[loc] = _ret.stat; if (process.platform !== 'win32' && extractOptions.chmod) setDirStat(path.dirname(loc)); _ret = null; } jxcore.tasks.forceGC(); var warn_node = null; if (proj.assets) { var ln = proj.assets.length; var caption = jxcore.utils.console.setColor('adding asset', 'yellow'); var sizeCheck = 0; for (var i = 0; i < ln; i++) { var loc = proj.assets[i].trim(); loc = nameFix(loc); var fn = path.resolve(loc); displayProgress(caption, loc); if (path.extname(loc) == '.node') { var matches = extractOptions && (!extract_what || (extract_what && extract_what.test && extract_what .test(loc))); if (!matches) warn_node = loc; } loc = './' + loc; var _ret = getFileAndStats(fn, legacyPackaging); if (!_ret) return; contents.docs[loc] = _ret.doc; contents.stats[loc] = _ret.stat; if (process.platform !== 'win32' && extractOptions.chmod) setDirStat(path.dirname(loc)); _ret = null; sizeCheck += contents.docs[loc].length; if (i % 50 === 0 || sizeCheck > 1e6) { sizeCheck = 0; jxcore.tasks.forceGC(); } } } jxcore.tasks.forceGC(); if (warn_node) { if (warn_node.length > 35) warn_node = '....' + warn_node.substr(warn_node.length - 35); console.log('Warning!', warn_node, 'red'); console.log( 'Adding a .node (native) file into package may fail the application', 'red'); jxcore.utils.console.log('Check the related discussion from', 'https://github.com/jxcore/jxcore/issues/101', 'blue'); jxcore.utils.console .info('However you may mark .node files as extractable, e.g.: ' + "--extract-what '*.node'"); } var c = JSON.stringify(contents); var cmped = scomp._cmp(c); c = null; jxcore.tasks.forceGC(); var op = getPackageName(process.argv); if (!op || (ops && ops.compile)) { op = contents.project.output; } if (op.length > 3) { var last = op.substr(op.length - 3); if (last.toLowerCase() == '.jx') { op = op.substr(0, op.length - 3); } } if (!legacyPackaging) cmped = Buffer.concat([ cmped, fss.readFileSync(fbuf_name), exports.numberToBuffer(cmped.length), exports.numberToBuffer(cmped.length + 12345) ]); if (fss.existsSync(fbuf_name)) fss.unlinkSync(fbuf_name); var cc = jxcore.utils.console.log; if (contents.project.native) { var os_info = jxcore.utils.OSInfo(); var cmd_sync = jxcore.utils.cmdSync, ret, copy = os_info.isWindows ? 'copy /Y' : 'cp', copy_ext = os_info.isWindows ? '.exe' : ''; var replaceStrings = function(file_name) { // replacing strings inside binary // called at one of two different positions in the code var index1 = binaryFileIndexOf(file_name, 'bin@ry.v@rsio' + 'n@', 32768); var index2 = binaryFileIndexOf(file_name, 'jxcore.bi' + 'n(?@@', 32768); if (index1 === -1 || index2 === -1) { cc('\nUnable to compile. Make sure the JX binary is not corrupted', 'red'); process.exit(1); return false; } var sz = fss.statSync(file_name).size; var fd = fss.openSync(file_name, 'r+'); // first string var buffer = new Buffer( parseInt((5 * (sz - cmped.length - 32)) - 123456789) + '') .toString('hex'); buffer += ')'; for (var o = buffer.length; o < 42; o++) { buffer += parseInt(Math.random() * 9) + ''; } buffer = new Buffer(new Buffer('bin@ry.v@rsion' + buffer.replace(/[d]/g, '*').replace(/[0]/g, '#').replace(/[1]/g, '$').replace(/[2]/g, '@').replace(/[3]/g, '!').replace(/[4]/g, '(').replace(/[5]/g, '{').replace(/[6]/g, '?').replace(/[7]/g, '<').replace(/[8]/g, ']').replace(/[9]/g, '|'))); fss.writeSync(fd, buffer, 0, 56, index1); // second string buffer = new Buffer(nativePackageMarker); fss.writeSync(fd, buffer, 0, 23, index2); fss.closeSync(fd); jxcore.tasks.forceGC(); return true; }; if (true) { // make jslint happy var file_name = process.cwd() + path.sep + op; file_name = nameFix(file_name); var op_str = ''; if (os_info.isWindows) op_str = 'del "' + file_name + copy_ext + '"'; else op_str = process.platform === 'android' ? 'rm -r ' + file_name : 'rm -rf ' + file_name; cmd_sync(op_str); if (fss.existsSync(file_name + copy_ext)) { cc('Target file in use', file_name + copy_ext, 'red'); process.exit(1); } op_str = copy + ' "' + process.execPath + '" "' + file_name + '"'; ret = cmd_sync(op_str); if (ret.exitCode != 0) { // on android there might be an error when copying the file with system // command: // cp: can't stat 'jx': Value too large for defined data type // so we try to copy one more time by using fs module: fss.writeFileSync(file_name, fss.readFileSync(process.execPath)); if (!fss.existsSync(file_name)) { cc(ret.out, 'red'); process.exit(1); } // copy chmod value try { var stat = fss.statSync(process.execPath); var octal_chmod = '0' + (stat.mode & parseInt('777', 8)).toString(8); fss.chmod(file_name, octal_chmod); } catch (ex) { cc('Cannot set file mode with chmod:', ex.toString(), 'red'); process.exit(1); } } if (!fss.existsSync(file_name)) { cc("Couldn't access to JX binary file or write into current folder. " + 'This is an unexpected error though but you may check the ' + 'permissions for JX binary file(s) or the current folder', 'red'); process.exit(1); } // Windows process changes the file more, a string is used to index // location // of data. // Non-windows can replace the strings here. Windows string replace // process // must wait. var sz = fss.statSync(file_name); var fd = fss.openSync(file_name, 'a'); fss.writeSync(fd, cmped, 99, 8, sz.size); fss.writeSync(fd, cmped, 44, 8, sz.size + 8); fss.writeSync(fd, cmped, 77, 8, sz.size + 16); fss.writeSync(fd, cmped, 22, 8, sz.size + 24); fss.writeSync(fd, new Buffer([ // New method for indexing data 0, 0, 0, 0, 0, 0, 0, // Unused (for now?) cmped.length >> 24 & 255, cmped.length >> 16 & 255, cmped.length >> 8 & 255, cmped.length & 255, 0, 0, 0, 0, // No // offset, // used for // later // file // modification // if // necessary 0xff ]), 0, 16, sz.size + 32); fss.writeSync(fd, cmped, 0, cmped.length, sz.size + 48); fss.writeSync(fd, cmped, 33, 16, sz.size + cmped.length + 48); fss.closeSync(fd); if (!os_info.isWindows && !replaceStrings(file_name)) return; } if (os_info.isWindows) { var verpatch_name = 'jx.exe.ver'; var verpatch = process.execPath + '.ver'; if (!fss.existsSync(verpatch)) verpatch = path.join(path.dirname(process.execPath), verpatch_name); if (!fss.existsSync(verpatch)) verpatch = path.join(process.cwd(), verpatch_name); if (!fss.existsSync(verpatch)) { // search in the path var _where = jxcore.utils.cmdSync('where ' + verpatch_name); if (!_where.exitCode) { // there can be multiple files. take the first one var _arr = _where.out.trim().split('\n'); verpatch = null; for (var o = 0, len = _arr.length; o < len; o++) { var _test = _arr[o].trim(); if (_test && fss.existsSync(_test)) { verpatch = _test; break; } } } else { verpatch = null; } } var quote = function(str) { return '"' + str + '"'; }; fss.renameSync(file_name, file_name + copy_ext); var error = false; if (verpatch) { // copy file var verpatch_local = file_name + '._.exe'; fss.writeFileSync(verpatch_local, fss.readFileSync(verpatch)); if (fss.existsSync(verpatch_local)) { var run_win = quote(verpatch_local) + ' /va ' + quote(file_name + copy_ext) + ' ' + quote(contents.project.version + ' (%date%)') + ' /s desc ' + quote(contents.project.description) + ' /s pb "Powered by JXcore"' + ' /s company ' + quote(contents.project.company) + ' /s product ' + quote(contents.project.name) + ' /s (c) ' + quote(contents.project.copyright || contents.project.company) + ' /pv ' + quote(contents.project.version); var batch_name = file_name + '_jx_mark.bat'; fss.writeFileSync(batch_name, run_win); var ret = jxcore.utils.cmdSync(batch_name); if (ret.exitCode) error = 'Error while executing command. ' + ret.out; jxcore.utils.cmdSync('del ' + quote(batch_name)); jxcore.utils.cmdSync('del ' + quote(verpatch_local)); } else { error = 'The `.ver` file could not be copied'; } } if (!verpatch || error) { cc(''); if (!verpatch) cc('Cannot apply file description information. ' + "The '.ver' file not found.", 'magenta'); if (error) cc('Cannot apply file description information.', error, 'magenta'); } if (!replaceStrings(file_name + copy_ext)) return; signFile(contents.project.sign, file_name + copy_ext); } cc('\n[OK] compiled file is ready (' + file_name + copy_ext + ')', !warn_node ? 'green' : ''); } else { fss.writeFileSync(op + '.jx', cmped); cc('[OK] compiled file is ready (' + contents.project.output + ')', !warn_node ? 'green' : ''); } process.exit(0); }; exports.package = function(argv) { var path = require('path'); var console = require('console'); var fs = require('fs'); var executer = null; var sss = argv[2].split('|'); if (sss.length > 1) executer = sss[1]; var fol = sss[0]; fol = (path.relative(process.cwd(), fol)); if (!fs.existsSync(path.join(process.cwd(), fol))) { jxcore.utils.console.error('Project startup file does not exist:', fol, 'red'); process.exit(1); } var startup_extension = path.extname(fol); if (startup_extension.toLowerCase() != '.js') { jxcore.utils.console.log('Project startup file must have a .js extension.', 'red'); process.exit(1); } var parsedArgv = jxcore.utils.argv.parse(); var preinstall = parsedArgv['preInstall'] || parsedArgv['preinstall']; var jxp = { 'name' : getPackageName(argv), 'version' : jxcore.utils.argv.getValue('version', '1.0'), 'author' : jxcore.utils.argv.getValue('author', ''), 'description' : jxcore.utils.argv.getValue('description', ''), 'company' : jxcore.utils.argv.getValue('company', ''), 'copyright' : jxcore.utils.argv.getValue('copyright', ''), 'website' : jxcore.utils.argv.getValue('website', ''), 'package' : null, 'startup' : fol, 'execute' : executer, 'extract' : getExtractOptions(), 'output' : null, 'files' : [], 'assets' : [], 'preInstall' : preinstall ? preinstall.splitBySep() || null : null, 'library' : jxcore.utils.argv.getBoolValue('library', true), 'license_file' : null, 'readme_file' : null, 'fs_reach_sources' : jxcore.utils.argv.getBoolValue('fs_reach_sources', true) }; if (parsedArgv.native) jxp.native = true; var sign = getSignOptions(); if (sign) jxp.sign = sign; try { // add only startup file var fz = { f : [ fol ], a : [] }; var addOnlyStartupFile = parsedArgv.add && (!parsedArgv.add.hasValue || parsedArgv.add.asBool); if (!addOnlyStartupFile) fz = getFiles(null, fol, jxp); jxp.files = fz.f; jxp.assets = fz.a; jxp.license_file = fz.license; jxp.readme_file = fz.readme; var fin = jxp.name + '.jxp'; jxp.output = jxp.name + '.jx'; fs.writeFileSync(fin, JSON.stringify(jxp, null, '\t')); console.log('JXP project file (' + fin + ') is ready.'); console.log(''); console.log('preparing the JX file..'); exports.compile([ '', 'jx', fin ]); } catch (e) { console.log(e); } }; exports.isNativePackage = function(file_name) { var id = -1; try { id = binaryFileIndexOf(file_name, nativePackageMarker); } catch (ex) { return false; } return id !== -1; }; exports.numberToBuffer = function(number) { return new Buffer([ number >> 32, number >> 24, number >> 16, number >> 8, ]); }; // reads 4 bytes exports.bufferToNumber = function(buf, offset) { if (!offset) offset = 0; var ret = (buf[offset + 0] << 32) + (buf[offset + 1] << 24) + (buf[offset + 2] << 16) + (buf[offset + 3] << 8); return ret; };// Copyright & License details are available under JXCORE_LICENSE file var util = require('util'); var net = require('net'); var FreeList = require('freelist').FreeList; var HTTPParser = process.binding('http_parser').HTTPParser; var Stream = require('stream'); var EventEmitter = require('events').EventEmitter; var assert = require('assert').ok; var _jx_helper = require('_jx_http_helper'); function readStart(socket) { if (!socket || !socket._handle || !socket._handle.readStart || socket._paused) return; socket._handle.readStart(); } function readStop(socket) { if (!socket || !socket._handle || !socket._handle.readStop) return; socket._handle.readStop(); } /* Abstract base class for ServerRequest and ClientResponse. */ var IncomingMessage = function IncomingMessage(socket, info, url) { Stream.Readable.call(this); // XXX NOTE: This implementation is kind of all over the place. // When the parser emits body chunks, they go in this list. // _read() pulls them out, and when it finds EOF, it ends. this.socket = socket; this.connection = socket; if (info) { this.httpVersion = info.versionMajor + '.' + info.versionMinor; // request (server) only this.url = url; if (info.method) { // server only this.method = info.method; this.statusCode = null; } else { // client only this.method = null; this.statusCode = info.statusCode; // CHECKME dead code? we're always a request parser } this.upgrade = info.upgrade; this.httpVersionMajor = info.versionMajor; this.httpVersionMinor = info.versionMinor; } this.complete = false; this.headers = {}; this.trailers = {}; this.readable = true; this._pendings = new Array(); this._pendingIndex = 0; // response (client) only this.client = this.socket; // flag for backwards compatibility grossness. this._consuming = false; // flag for when we decide that this message cannot possibly be // read by the user, so there's no point continuing to handle it. this._dumped = false; }; util.inherits(IncomingMessage, Stream.Readable); IncomingMessage.prototype.setTimeout = function(msecs, callback) { if (callback) this.on('timeout', callback); this.socket.setTimeout(msecs); }; IncomingMessage.prototype.read = function(n) { this._consuming = true; this.read = Stream.Readable.prototype.read; return this.read(n); }; IncomingMessage.prototype._read = function(n) { // We actually do almost nothing here, because the parserOnBody // function fills up our internal buffer directly. However, we // do need to unpause the underlying socket so that it flows. if (this.socket.readable) readStart(this.socket); }; // It's possible that the socket will be destroyed, and removed from // any messages, before ever calling this. In that case, just skip // it, since something else is destroying this connection anyway. IncomingMessage.prototype.destroy = function(error) { if (this.socket) this.socket.destroy(error); }; var arrHeaders = [ null, 'host', 'user-agent', 'accept', 'accept-language', 'accept-encoding', 'cookie', 'connection', 'cache-control', 'set-cookie', // index 9 - must be maintained 'accept-charset', 'link', 'pragma', 'www-authenticate', 'proxy-authenticate', 'sec-websocket-extensions', 'sec-websocket-protocol']; IncomingMessage.prototype._addHeaderLines = function(headers, n) { var dest = this.complete ? this.trailers : this.headers; for (var i = 0; i < n; i += 2) { var field = headers[i], value = headers[i + 1]; if (field[0]) { if (field[0] == 9) { // set-cookie if (!dest['set-cookie']) { // don't use [] here ! JIT cant_compile var arr = new Array(1); arr[0] = value; dest['set-cookie'] = arr; } else dest['set-cookie'].push(value); continue; } var fname = arrHeaders[field[0]]; if (!dest[fname]) dest[fname] = value; else dest[fname] += ', ' + value; continue; } field = field[1].toLowerCase(); if (dest[field] === undefined) { dest[field] = value; continue; } if (_jx_helper.isX(field)) { dest[field] += ', ' + value; continue; } switch (field) { // compatibility mode // Array headers: case 'host': case 'user-agent': case 'accept': case 'accept-charset': case 'accept-encoding': case 'accept-language': case 'cache-control': case 'connection': case 'cookie': case 'pragma': case 'link': case 'www-authenticate': case 'proxy-authenticate': case 'sec-websocket-extensions': case 'sec-websocket-protocol': dest[field] += ', ' + value; break; case 'set-cookie': if (!dest[field]) { // don't use [] here ! JIT cant_compile var arr = new Array(1); arr[0] = value; dest[field] = arr; } else { if (dest[field].substr) { // don't use [] here ! JIT cant_compile var arr = new Array(1); arr[0] = dest[field].toString(); dest[field] = arr; } dest[field].push(value); } break; default: break; } } }; // Add the given (field, value) pair to the message // // Per RFC2616, section 4.2 it is acceptable to join multiple instances of the // same header with a ', ' if the header in question supports specification of // multiple values this way. If not, we declare the first instance the winner // and drop the second. Extended header fields (those beginning with 'x-') are // always joined. IncomingMessage.prototype._addHeaderLine = function(field, value) { var dest = this.complete ? this.trailers : this.headers; field = field.toLowerCase(); switch (field) { // Array headers: case 'host': case 'user-agent': case 'accept': case 'accept-charset': case 'accept-encoding': case 'accept-language': case 'cache-control': case 'connection': case 'cookie': case 'pragma': case 'link': case 'www-authenticate': case 'proxy-authenticate': case 'sec-websocket-extensions': case 'sec-websocket-protocol': if (dest[field] !== undefined) { dest[field] += ', ' + value; } else { dest[field] = value; } break; case 'set-cookie': if (dest[field] !== undefined) { dest[field].push(value); } else { dest[field] = [value]; } break; default: if (_jx_helper.isX(field)) { // except for x- if (dest[field] !== undefined) { dest[field] += ', ' + value; } else { dest[field] = value; } } else { // drop duplicates if (dest[field] === undefined) dest[field] = value; } break; } }; // Call this instead of resume() if we want to just // dump all the data to /dev/null IncomingMessage.prototype._dump = function() { if (!this._dumped) { this._dumped = true; if (this.socket.parser) this.socket.parser.incoming = null; this.push(null); readStart(this.socket); this.read(); } }; exports.IncomingMessage = IncomingMessage; // Copyright & License details are available under JXCORE_LICENSE file jxcore.store.shared.set('$$$$$$$$$$$$$', 1); // dummy set if (!process.isEmbedded && !process._eval && (!process._EmbeddedSource || process.isPackaged)) { var fs = require('fs'); var tw = process.binding('jxutils_wrap'); var path = require('path'); var isWindows = process.platform === 'win32'; var app_location = ''; if (process._Monitor) { app_location = process.argv[3]; } else if (process._MTED) { app_location = process.argv[2]; } else { app_location = process.argv[1]; } var jxconfig = { maxMemory: null, allowSysExec: null, allowLocalNativeModules: true, allowCustomSocketPort: null, globalModulePath: null, maxCPU: null, maxCPUInterval: null, globalApplicationConfigPath: null, npmjxPath: null, allowMonitoringAPI: true }; var global_config_path = process.execPath + '.config'; if (process.platform === "win32") { // strip ".exe" and make it e.g. "jx.config" or "node.config" var f = global_config_path.replace('.exe.', '.'); if (fs.existsSync(f)) { global_config_path = f; } else { // backwards compatibility: until now on windows the config file name was "node.config" global_config_path = global_config_path.replace('jx.exe.config', 'node.config'); } } var applyConfig = function(formPath, content) { if (fs.existsSync(formPath) || content) { try { var conf; if (!content) { conf = fs.readFileSync(formPath) + ''; } else conf = content; conf = JSON.parse(conf); for (var o in jxconfig) { if (conf[o] != undefined && jxconfig.hasOwnProperty(o)) { jxconfig[o] = conf[o]; } } } catch (e) { console.error( "Application couldn't start because of the configuration file is " + 'either corrupted or not accessible.', e); process.exit(1); } } }; applyConfig(global_config_path); if (jxconfig.npmjxPath && jxconfig.npmjxPath.substr) { var _path = jxconfig.npmjxPath; _path = _path.trim(); if (_path[_path.length - 1] == path.sep) { _path = _path.substr(0, _path.length - 1); } Object.defineProperty(process, '__npmjxpath', { value: _path, configurable: false, writable: false }); } delete (jxconfig.npmjxPath); jxconfig.portTCP = null; jxconfig.portTCPS = null; var getMemContent = function(content) { var $uw = process.binding('memory_wrap'); if (!$uw.existsSource(content)) return null; var data = new Buffer($uw.readSource(content), 'base64'); var str = data.toString(); data = null; return str; }; if (!jxconfig.globalApplicationConfigPath) { if (process._EmbeddedSource) { // this cannot work, it looks like the content is not available yet // applyConfig(null, getMemContent('@' + process.cwd() + path.sep + // 'jxcore.config.jx')); applyConfig(process.execPath + '.jxcore.config'); } else applyConfig(app_location + '.jxcore.config'); } else { app_location = app_location.replace(/[\/]/g, '_').replace(/[\\]/g, '_') .replace(/[:]/g, '_'); var loc = jxconfig.globalApplicationConfigPath + path.sep + app_location + '.jxcore.config'; applyConfig(loc); } if (jxconfig.globalModulePath && jxconfig.globalModulePath.substr) { jxconfig.globalModulePath = jxconfig.globalModulePath.trim(); if (jxconfig.globalModulePath[jxconfig.globalModulePath.length - 1] != path.sep) { jxconfig.globalModulePath += path.sep; } if (isWindows) jxconfig.globalModulePath = jxconfig.globalModulePath.toLowerCase(); var mod = require('module'); mod.addGlobalPath(jxconfig.globalModulePath + 'node_modules'); exports.__jx_global_path = jxconfig.globalModulePath; } tw.beforeApplicationStart(jxconfig); if (jxconfig.maxCPU || jxconfig.maxMemory) { var $jxt = process.binding('jxtimers_wrap'); $jxt.startWatcher(); } if (!jxconfig.allowMonitoringAPI) { var mem = process.binding('memory_wrap'); mem.setSource('_jx_monitor_helper', 'console.error(\'monitoring API is disabled for this process\');'); mem.setSource('_jx_monitor', 'console.error(\'monitoring API is disabled for this process\');'); } } // Copyright & License details are available under JXCORE_LICENSE file exports.STATUS_CODES = { 100 : 'Continue', 101 : 'Switching Protocols', 102 : 'Processing', // RFC 2518, obsoleted by RFC 4918 200 : 'OK', 201 : 'Created', 202 : 'Accepted', 203 : 'Non-Authoritative Information', 204 : 'No Content', 205 : 'Reset Content', 206 : 'Partial Content', 207 : 'Multi-Status', // RFC 4918 300 : 'Multiple Choices', 301 : 'Moved Permanently', 302 : 'Moved Temporarily', 303 : 'See Other', 304 : 'Not Modified', 305 : 'Use Proxy', 307 : 'Temporary Redirect', 400 : 'Bad Request', 401 : 'Unauthorized', 402 : 'Payment Required', 403 : 'Forbidden', 404 : 'Not Found', 405 : 'Method Not Allowed', 406 : 'Not Acceptable', 407 : 'Proxy Authentication Required', 408 : 'Request Time-out', 409 : 'Conflict', 410 : 'Gone', 411 : 'Length Required', 412 : 'Precondition Failed', 413 : 'Request Entity Too Large', 414 : 'Request-URI Too Large', 415 : 'Unsupported Media Type', 416 : 'Requested Range Not Satisfiable', 417 : 'Expectation Failed', 418 : 'I\'m a teapot', // RFC 2324 422 : 'Unprocessable Entity', // RFC 4918 423 : 'Locked', // RFC 4918 424 : 'Failed Dependency', // RFC 4918 425 : 'Unordered Collection', // RFC 4918 426 : 'Upgrade Required', // RFC 2817 428 : 'Precondition Required', // RFC 6585 429 : 'Too Many Requests', // RFC 6585 431 : 'Request Header Fields Too Large',// RFC 6585 500 : 'Internal Server Error', 501 : 'Not Implemented', 502 : 'Bad Gateway', 503 : 'Service Unavailable', 504 : 'Gateway Time-out', 505 : 'HTTP Version Not Supported', 506 : 'Variant Also Negotiates', // RFC 2295 507 : 'Insufficient Storage', // RFC 4918 509 : 'Bandwidth Limit Exceeded', 510 : 'Not Extended', // RFC 2774 511 : 'Network Authentication Required' // RFC 6585 }; exports.isX = function(s) { if (s.length > 1 && s[0] == 'x') { if (s[1] == '-') { return true; } } return false; }; // Copyright & License details are available under JXCORE_LICENSE file var loaded = {}; var mod = process.binding('module_wrap'); exports.require = function(name) { if (loaded[name]) return loaded[name]; var cc = {}; mod.loadInternal(cc, name); loaded[name] = cc; return loaded[name]; }; // Copyright & License details are available under JXCORE_LICENSE file var path = require('path'); var fs = require('fs'); var mon = require('_jx_monitor'); var _tw = process.binding('jxutils_wrap'); var cc = jxcore.utils.console; var subscribeOkString = 'Native package has been successfully subscribed to ' + 'the monitor and runs as a separate process.'; var quitedTooFastString = 'Application did not subscribe to the monitor, ' + 'because it completes under start_delay interval.'; var stopIt = function(restart) { cc.log('Stopping JXcore monitoring service.', 'cyan+bold'); mon.checkMonitorExists(function(err, msg) { var _restartOrExit = function(restart, err, msg) { if (err && msg) console.error(err, msg); console.log(''); if (restart) { startIt(); } else { process.exit(err ? 1 : 0); } }; if (!err) { mon.stopMonitor(function(err2, msg2) { if (!err2) console.log('Monitoring service is closed now.'); _restartOrExit(restart, err2, msg2); }); } else { console.log('Monitoring service is not online.'); _restartOrExit(restart); } }); }; var startMon = function() { var logFileName = './jxcore.monitor.console.log'; if (fs.existsSync(logFileName)) fs.unlinkSync(logFileName); var spawn = require('child_process').spawn; var out = fs.openSync(logFileName, 'a'); var err = fs.openSync(logFileName, 'a'); var cmd = process.argv[0]; var child = spawn(cmd, ['monitor', 'startx'], { detached: true, stdio: ['ignore', out, err] }); child.unref(); setTimeout(function() { if (fs.existsSync(logFileName)) { console.log(fs.readFileSync(logFileName).toString().trim()); console.log(''); // exit without error process.exit(0); } else { mon.checkMonitorExists(function(err, msg) { if (!err) { console.log('Monitoring service is started.'); } else { console.log('Monitoring service is not online.'); } if (msg) console.error(msg); console.log(''); process.exit(err ? 1 : 0); }); } }, 2000); }; var startIt = function() { cc.log('Starting JXcore monitoring service.', 'cyan+bold'); mon.checkMonitorExists(function(err, msg) { if (!err) { cc.log('Monitoring is already active.', 'red+bold'); process.exit(1); } else { startMon(); } }); }; var followNativePackage = function() { // spawning native package with process.env.JX_MONITOR_RUN variable set // it will subscribe to monitor internally process.env.JX_MONITOR_RUN = true; // cutting out 4 params: jx monitor run native_file var argv = process.argv.slice(4); var fname = path.join(__dirname, './jxcore.' + path.basename(process.mainModule.filename) + '.log'); if (fs.existsSync(fname)) fs.unlinkSync(fname); var spawn = require('child_process').spawn, out = fs.openSync(fname, 'a'), err = fs.openSync(fname, 'a'), dontCheck = false; // skip "jx monitor run" var child = spawn(process.argv[3], argv, { detached: true, stdio: ['ignore', out, err] }); var killAndExit = function(err, msg) { dontCheck = true; if (err) cc.error(err); if (msg) cc.log(msg); try { if (child) child.kill(); } catch (ex) { } process.exit(err ? 1 : 0); }; child.on('exit', function(code) { var msg = null; var err = null; if (code) { err = 'Application exited with exitCode ' + code + '.'; try { msg = fs.readFileSync(fname).toString(); } catch (ex) { } } else { var str = readLog(); if (str && str.indexOf(quitedTooFastString) !== -1) msg = quitedTooFastString; } killAndExit(err, msg); }); child.on('error', function(err) { killAndExit('Cannot spawn a native package:\n' + err); }); var readLog = function() { try { return fs.readFileSync(fname).toString(); } catch (ex) { } return null; }; var checkLog = function() { if (dontCheck) return; var str = readLog(); if (str && str.indexOf(subscribeOkString) !== -1) { // may exit now, and leave the child running, // since the child has successfully subscribed cc.log(subscribeOkString); child.unref(); process.nextTick(process.exit); } if (new Date() - start > 5000) { killAndExit('Timeout on application subscribing to the monitor.'); } else { setTimeout(checkLog, 500); } }; var start = new Date(); setTimeout(checkLog, 500); }; exports.tryToFollowMeOrExit = function(cb) { mon.followMe(function(err, msg) { if (err) { cc.log('Application monitoring failed.', 'red+bold'); if (msg) console.error(msg); console.log(''); process.exit(1); } else { if (process.env.JX_MONITOR_RUN) cc.log(subscribeOkString); if (cb) cb(); } }, function(delay) { setTimeout(function() { }, delay + 100).unref(); var timeStamp = new Date(); process.on('exit', function() { if (new Date() - timeStamp < delay) { cc.log(quitedTooFastString); } }); }); }; try { var cmd = process.argv[2] ? process.argv[2].trim().toLowerCase() : null; if (cmd == 'run') { if (process.argv.length < 4) { cc.log('missing application file', 'red+bold'); cc.log(''); console.log('usage: jx monitor run [applicationfile]'); console.log(''); process.exit(1); } else { process.argv[3] = path.resolve(process.argv[3]); var isNativePackage = false; var extName = path.extname(process.argv[3]).toLowerCase(); if (extName !== '.js' && extName !== '.jx') { var pkg = require('_jx_package'); isNativePackage = pkg.isNativePackage(process.argv[3]); if (!isNativePackage) { cc.error('The `jx monitor run` command can work only with .js ' + 'files, .jx packages and native packages.'); cc.error('The given file is neither of them: ' + process.argv[3], 'red+bold'); process.exit(1); } } require.main.filename = process.argv[3]; require.main.fileSource = null; require('_jx_config'); if (!isNativePackage) { // .js or .jx files require(process.argv[3]); // if app dies before start_delay, that's ok: // following the monitor will not take place exports.tryToFollowMeOrExit(); } else { followNativePackage(); } } } else if (cmd == 'start') { _tw.beforeApplicationStart({}); startIt(); } else if (cmd == 'startx') { _tw.beforeApplicationStart({}); var mon = require('_jx_monitor'); mon.startIfNotExists(); } else if (cmd == 'stop') { _tw.beforeApplicationStart({}); stopIt(); } else if (cmd == 'kill') { _tw.beforeApplicationStart({}); process.argv[3] = path.resolve(process.argv[3]); mon.releasePath(process.argv[3], function(err, msg) { if (err) { cc.log('Kill operation failed.', 'red+bold'); if (msg) console.error(msg); console.log(''); process.exit(1); } else { console.log(msg || 'Process with given path is killed.'); } }); } else if (cmd == 'restart') { _tw.beforeApplicationStart({}); stopIt(true); } } catch (e) { cc.log('Error:' + e, 'red+bold'); console.log(''); process.exit(1); } // Copyright & License details are available under JXCORE_LICENSE file var defaultMonConfig = { 'monitor' : { 'host' : '127.0.0.1', 'port' : 17777, 'check_interval' : 1000, // supported tags: [WEEKOFYEAR], [DAYOFMONTH], [DAYOFYEAR], [YEAR], [MONTH], // [MINUTE], [HOUR] 'log_path' : 'monitor_[WEEKOFYEAR]_[YEAR].log', 'start_delay' : 2000 } }; var fs = require('fs'), path = require('path'), _http = require('http'), _https = require('https'), os = require('os'), util = require('util'), _url = require('url'); var http = null, https_keys = null; var strings = { send_question: 'jx_who_are_you', get_answer: 'i_am_a_jx_monitor', send_data: 'sending_data', get_dataOK: 'thanks_for_sending_the_data', command_kill: 'should_be_killed', command_refuse: 'wrong_data', send_command: 'send_command', send_command_hash: 'commandHash', monitor_shutdown: 'Monitor shutdown.' }; var argNames = { start_monitor: 'start', stop_monitor: 'stop', restart_monitor: 'restart', leave_me: 'leave_me', checkPath: 'check', console: 'console', monitor_old_pid: 'JX_MONITOR_RESPAWN_OLD_PID', monitor_respawn_id: 'JX_MONITOR_RESPAWN_ID' }; var parsedArgv = jxcore.utils.argv.parse(), appConfig = null, monConfig = null, monLogPath = null, monLogDisabled = false, isWindows = process.platform === 'win32', maxAttemptCount = 10, attemptID = 0, attemptInterval = 1000, monitoredProcesses = {}, killedProcesses = {}, // true if monitor shuts down and kills the children: massiveKiller = false, tmpLogCache = [], tmpLogCacheFlushed = false, // true, if current process is the monitor (it created http server): iAmTheMonitor = false, exitting = false, monitorUrl = '', childrenCheckInProgress = false, childrenStopInProgress = false; /** * Writes log to the file (if can) * * @param {string} txt * - text to log. * @param {boolean} alsoToConsole * - is used in some critical point to write msg not only to log, * but also to console. */ var monCounter = 0; var writeToLog = function(txt, alsoToConsole) { // argv[argNames.console] is just for development process if (parsedArgv[argNames.console] || alsoToConsole) console.log(txt); txt = jxcore.utils.console.removeColors(txt); if (!monLogDisabled) { // some logging can occur before config file will be read // and log_path will be known so we cache some messages if (!tmpLogCacheFlushed) { tmpLogCache.push(txt); if (tmpLogCache.length >= 100) { tmpLogCache.unshift(); } } } else { tmpLogCache = null; } if (monLogPath && !monLogDisabled) { if (monCounter++ > 1e4) { monCounter = 0; monLogPath = findLogPath(); } try { if (!tmpLogCacheFlushed) { txt = tmpLogCache.join(os.EOL); tmpLogCacheFlushed = true; tmpLogCache = null; } fs.appendFileSync(monLogPath, txt + os.EOL); } catch (ex) { // cannot write to log file. Where should we display the output if not to // console? } } }; var log = function(txt, alsoToConsole) { writeToLog(txt, alsoToConsole); }; var logError = function(txt, ex, alsoToConsole) { if (txt) { var e = ex ? '. Exception message: ' + (ex.message ? ex.message : ex) : ''; writeToLog('Error: ' + txt + e, alsoToConsole); } }; var throwError = function(txt) { logError(txt); throw txt; }; /** * Sends request to the monitor with url = http://host:port/path * * @param {string} path * - this is the last part of the url (http://host:port/path). * @param {object} jsonData * - this object (stringified) will be sent by POST method. * @param {string} expectedAnswer * - The answer from monitor is compared with this value. If * they are equal, sendRequest is considered to be successful. * @param {function} cb * - this callback will be invoked after sendRequest * completes. Callback will receive 2 params (err true/false, txt). If * error occurs, txt will have error message, otherwise, txt will have * returned msg. */ var sendRequest = function(path, jsonData, expectedAnswer, cb) { var requestOptions = { host: monConfig.monitor.host, port: monConfig.monitor.port, path: '/' + path, method: 'POST', headers: { 'Content-Type' : 'application/json', 'Content-Length' : 0 } }; var str = JSON.stringify(jsonData); requestOptions.headers['Content-Length'] = str.length; var __request = function(res) { res.setEncoding('utf-8'); var body = ''; res.on('data', function(data) { body += data; }); res.on('end', function() { if (cb) { var bodyStr = body.toString(); if (body.toString().indexOf(expectedAnswer) === -1) { var refused = body.indexOf(strings.command_refuse) > -1; var err = refused ? bodyStr : 'Problem with connecting to the monitor. ' + 'Received not what expected: ' + bodyStr; cb(true, err); } else { cb(false, bodyStr); } } req.connection.destroy(); }); res.on('error', function(err) { if (cb) { cb(false, err); } }); }; var req = http.request(requestOptions, __request); req.on('error', function(e) { if (cb) { cb(true, e); } req.connection.destroy(); }); req.write(str); req.end(); }; /** * Tries to connect to monitor. * * @param {function} cb * - this callback will receive 3 params * (online true/false, err, txt). */ var isMonitorOnline = function(cb) { if (!cb) { return; } // if port is busy, then the error occurs, but that means that our monitor // might be online sendRequest(strings.send_question, null, strings.get_answer, function(err, txt) { if (err) { cb(true, txt); } else { if (txt.trim().indexOf(strings.get_answer.trim()) === -1) { cb(true, 'There is another application listening on port ' + monConfig.monitor.port); } else { // jx monitor is online cb(false, null); } } }); }; /** * Reads config from given file * * @param {string} configFile - full path. * @return {object} - Returns config parsed as json object or nothing. */ var readConfig = function(configFile) { process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; var cfg = null; configFile = path.normalize(configFile); if (fs.existsSync(configFile)) { try { cfg = JSON.parse(fs.readFileSync(configFile) + ''); if (cfg.monitor.https) { http = _https; https_keys = cfg.monitor.https; } else { http = _http; } } catch (ex) { logError('Cannot parse config file from ' + configFile); } } else { logError('The config file does not exist: ' + configFile); } if (!http) { http = _http; } return cfg; }; var jxPath = process.execPath; if (process.isPackaged) { var cmd = isWindows ? 'where jx' : 'which jx'; var ret = jxcore.utils.cmdSync(cmd); if (!ret.exitCode) { var jxFile = path.normalize(ret.out.trim()); if (fs.existsSync(jxFile)) { jxPath = jxFile; log('Found the path for jx executable: ' + jxPath); } else { log('Could not find the path for jx executable: ' + jxPath); } } } // reading monConfig. It should be read, because app should know the port, on // which monitor is listening monConfig = readConfig(path.dirname(jxPath) + path.sep + 'jx.config') || {}; /** * Recursively copies fields from json_from into json_to, if they are not * present in json_to. This is to apply default parameters if they are not * present in config file. * * @param {object} json_from - object to copy fields from. * @param {object} json_to - object to copy fields to. * @param {string} prefix - internal use. Should be empty on first call. */ var copyConfigParams = function(json_from, json_to, prefix) { for (var a in json_from) { if (!json_from.hasOwnProperty(a)) continue; var isJSON = typeof json_from[a] == 'object'; var empty = typeof json_to[a] === 'undefined'; if (isJSON && empty) { json_to[a] = {}; } if (!isJSON && !empty) { continue; } var pref = prefix ? prefix + '.' + a : a; if (isJSON) { copyConfigParams(json_from[a], json_to[a], pref); } else { json_to[a] = json_from[a]; log("Parameter '" + pref + "' is not present in jx.config. Using default value: '" + json_from[a] + "'."); } } monitorUrl = (https_keys ? 'https://' : 'http://') + monConfig.monitor.host + ':' + monConfig.monitor.port; }; // applying default values copyConfigParams(defaultMonConfig, monConfig); /** * Searches for final log_path. If it's defined in jx.config, that uses this * value, but it may not have permissions for writing. In that case tries to * write the log in apps folder. */ var findLogPath = function() { if (monLogPath) return; // checking, if log file is accessible var now = new Date(); var firstJanuary = new Date(now.getFullYear(), 0, 0); var dayOfTheYear = Math.floor((now - firstJanuary) / 86400000); var weekOfTheYear = Math.ceil(dayOfTheYear / 7); var paths = []; if (monConfig.monitor.log_path) { var logPath = monConfig.monitor.log_path; // var ext = path.extname(logPath); var dir = path.dirname(logPath).trim(); if (dir == '.' || dir == '..') { // applying default dir - current directory logPath = process.cwd() + path.sep + logPath; } paths.push(logPath); } // next possible file name is taken from defaultMonConfig.monitor.log_path paths.push(process.cwd() + path.sep + defaultMonConfig.monitor.log_path); var firstError = ''; for (var a = 0, len = paths.length; a < len; a++) { try { var fname = paths[a]; fname = fname.replace(/\[WEEKOFYEAR\]/g, weekOfTheYear).replace( /\[YEAR\]/g, now.getFullYear()).replace(/\[DAYOFMONTH\]/g, now.getDate() + 1).replace(/\[DAYOFYEAR\]/g, dayOfTheYear).replace( /\[MONTH\]/g, now.getMonth() + 1).replace(/\[MINUTE\]/g, now.getMinutes()).replace(/\[HOUR\]/g, now.getHours()); var ext = path.extname(fname); if (ext.length) fname = fname.substr(0, fname.length - (ext.length + 1)); fname += '-' + Date.now(); if (ext.length) fname += ext; // write test if (!fs.existsSync(fname)) { fs.writeFileSync(fname, ''); try { fs.unlinkSync(fname); } catch (ex) { } } else { fs.appendFileSync(fname, ''); } log('Using log_path: ' + fname); return fname; } catch (ex) { if (!firstError) { firstError = ex.message; } log('Cannot use file ' + fname + ' for logging. Error: ' + ex.message); } } // if arrived here, it means, that he couldn't find any valid log_path monLogDisabled = true; log('Cannot use logging feature: ' + firstError, true); }; // ************************ Here starts the main logic /** * Makes maxAttemptCount attempts for sending specific http request to the * monitor * * @param {string} urlPath * - this is the last part of the url (http://host:port/path). * @param {object} json * - this object (stringified) will be sent by POST method. * @param {string} expectedAnswer * - The answer from monitor is compared with this value. If * they are equal, sendRequest is considered to be successful. * @param {function} func * - this function should be called on next attempt. * @param {object} env * - this object should have 3 members { cb, errMsg, okMsg }. * cb will be invoked after sendRequest completes and will receive 2 * params (err true/false, txt). If error occurs, txt will have error * message, otherwise, txt will have returned msg. */ var sendDataInLoop = function(urlPath, json, expectedAnswer, func, env) { if (attemptID++ >= maxAttemptCount) { var s = 'Cannot sent data to the monitor after ' + attemptID + ' attempts. Giving up.'; if (env) { if (env.errMsg) { s = env.errMsg + ' ' + s; } if (env.cb) { env.cb(true, s); } } logError(s); return; } sendRequest( urlPath, json, expectedAnswer, function(err, msg) { if (err) { var _exit = !iAmTheMonitor && msg && msg.toString().indexOf(strings.command_kill) !== -1; if (msg) msg = msg + ''; if (msg && msg.indexOf(strings.command_refuse) > -1 && env && env.cb) { var s = msg.replace(strings.command_refuse, ''); if (env.errMsg) { s = env.errMsg + ' ' + s; } if (_exit) { s = 'Monitor says, that the app was already killed and needs ' + 'to be terminated. Exiting now.'; // don't exit yet. Give a chance to invoke user's callback } env.cb(true, s); } else { setTimeout(function() { func(env.cb); }, attemptInterval); } // exit now if (_exit) process.exit(); } else { var s = 'Successfully sent data to the monitor on attempt no ' + attemptID + '. ' + monitorUrl + '/' + urlPath; if (env) { if (env.okMsgEx && msg !== expectedAnswer) { s = env.okMsgEx.replace('__body__', msg.replace(expectedAnswer, '')); } else if (env.okMsg) { s = env.okMsg.replace('__body__', msg); } if (env.cb) { env.cb(false, s); } } log(s); } }); }; var subscribe = function(cb) { var _path; if (process.isPackaged) { _path = path.resolve(process.argv[0]); } else { var len = process.argv.length; var fst = process.argv[1].toLowerCase(), scd = (len > 2) ? process.argv[2].toLowerCase() : ''; if (fst == 'monitor' && scd == 'run' && len > 3) { _path = path.resolve(process.argv[3]); } else if (fst == 'mt' || fst == 'mt-keep' || fst.indexOf('mt-keep:') >= 0 || fst.indexOf('mt:') >= 0) { _path = path.resolve(process.argv[2]); } else _path = path.resolve(process.argv[1]); } var json = { pid: process.pid, path: _path, argv: process.argv, config: appConfig, threadIDs: [process.threadId], isPackaged: process.isPackaged, old_pid: process.env[argNames.monitor_old_pid], respawn_id: process.env[argNames.monitor_respawn_id] }; if (process.env.JX_MONITOR_RUN) json.JX_MONITOR_RUN = process.env.JX_MONITOR_RUN; var env = { cb: cb, errMsg: 'Cannot subscribe process ' + process.pid + ' to the monitor.', okMsg: 'Successfully subscribed process ' + process.pid + ' to the monitor.', okMsgEx: '__body__.' }; sendDataInLoop(strings.send_data, json, strings.get_dataOK, subscribe, env); }; var unsubscribe = function(cb) { var cmd = { pid: process.pid }; cmd[strings.send_command_hash] = argNames.leave_me; var env = { cb: cb, errMsg: 'Cannot unsubscribe process ' + process.pid + ' from the monitor.', okMsg: 'Successfully unsubscribed process ' + process.pid + ' from the monitor.' }; sendDataInLoop(strings.send_command, cmd, strings.get_dataOK, unsubscribe, env); }; var killPath = function(_path, cb) { var cmd = { path: _path }; if (process.getuid) { cmd.uid = process.getuid(); } cmd[strings.send_command_hash] = argNames.leave_me; var env = { cb: cb, errMsg: 'Cannot kill process with path ' + _path + '.', okMsg: 'Process with given path is killed: ' + _path + '.', okMsgEx: '__body__.' }; sendDataInLoop(strings.send_command, cmd, strings.get_dataOK, killPath, env); }; var stopServer = function(cb) { var cmd = {}; if (process.getuid) { cmd.uid = process.getuid(); } cmd[strings.send_command_hash] = argNames.stop_monitor; var env = { cb: cb, errMsg: 'Cannot stop the monitor process.', okMsg: 'Monitor confirmed receiving the stop request.\n__body__\n' + 'Monitor stopped.' }; sendDataInLoop(strings.send_command, cmd, strings.monitor_shutdown, stopServer, env); }; /** * Checks single monitored process. If does not exists - respawns it. * * @param {object} json * - This is an object sent from the client. It must have a * json.pid field. */ var checkProcess = function(json) { if (json.respawning || json.remove) return; // sending kill(0) check if process exists. Should work on all platforms var isAlive = false; try { isAlive = process.kill(json.pid, 0); } catch (ex) { } if (!isAlive) { if (json.respawnAttemptID++ > maxAttemptCount) { logError('Cannot spawn the process after ' + json.respawnAttemptID + ' attempts. Giving up.'); delete monitoredProcesses[json.pid]; return; } var _env = JSON.parse(JSON.stringify(process.env)); _env[argNames.monitor_old_pid] = json.pid; _env[argNames.monitor_respawn_id] = (json.respawn_id || 0) + 1; if (json.JX_MONITOR_RUN) _env.JX_MONITOR_RUN = json.JX_MONITOR_RUN; var child = require('child_process').spawn(json.argv[0], json.argv.slice(1), { env: _env }); if (child) { monitoredProcesses[json.pid].respawning = true; monitoredProcesses[json.pid].child = child; log('Respawned process. Old pid : ' + json.pid + ' with args ' + JSON.stringify(json.argv)); } } }; /** * Checks for every monitored process, if it still exists. */ var checkProcesses = function() { if (!monitoredProcesses || massiveKiller || childrenCheckInProgress) return; if (childrenStopInProgress) { // try again in a moment setTimeout(checkProcesses, 200); return; } childrenCheckInProgress = true; var remove = []; for (var pid in monitoredProcesses) { if (monitoredProcesses.hasOwnProperty(pid)) { if (monitoredProcesses[pid].remove) { remove.push(pid); continue; } checkProcess(monitoredProcesses[pid]); } } // removes entries marked for removal for (var a = 0, len = remove.length; a < len; a++) delete monitoredProcesses[remove[a]]; // cleanup for killedProcesses var now = new Date(); for (var pid in killedProcesses) { if (killedProcesses.hasOwnProperty(pid)) { if (now - killedProcesses[pid] > monConfig.monitor.start_delay * 2) delete killedProcesses[pid]; } } childrenCheckInProgress = false; setTimeout(checkProcesses, monConfig.monitor.check_interval); }; /** * Makes few attempts to stop all monitored children * * @param {function} cb - callback. * @param {array} arr - list of monitored children or null to kill all. * @param {object} env - object to report results. */ var stopChildren = function(cb, arr, env) { if (!cb) return; if (!arr) massiveKiller = true; var _arr = (!arr) ? monitoredProcesses : arr; if (!monitoredProcesses) { env.msg = 'There are no children currently monitored, so there is ' + 'nothing to kill.'; cb(env); return; } if (childrenCheckInProgress) { // try again in a moment log('try again in a moment'); setTimeout(function() { stopChildren(cb, arr, env); }, 200); return; } childrenStopInProgress = true; if (!env) { env = { killed: [], killFailed: [], report: [] }; } var cnt = 0; if (massiveKiller) env.report.push(strings.monitor_shutdown); for (var pid in _arr) { if (!_arr.hasOwnProperty(pid)) continue; cnt++; if (_arr[pid].remove) continue; _arr[pid].killAttempt = _arr[pid].killAttempt || 0; if (_arr[pid].killAttempt < maxAttemptCount) { var pid_to_kill = _arr[pid].respawning && _arr[pid].child ? _arr[pid].child.pid : pid; var isAlive = false; try { isAlive = process.kill(pid_to_kill, 0); } catch (ex) { } if (isAlive) { _arr[pid].killAttempt++; process.kill(pid_to_kill); } else { _arr[pid].killed = true; _arr[pid].remove = true; env.report.push('CLOSED -> ' + _arr[pid].path + ' (' + pid + ')'); env.killed.push(pid); // TODO: better remove after the loop finishes delete monitoredProcesses[pid]; killedProcesses[pid] = new Date(); continue; } } else { _arr[pid].cannotKill = true; env.report.push('NOT CLOSED (after ' + _arr[pid].killAttempt + ' attempts) -> ' + _arr[pid].path); env.killFailed.push(pid); } } if (typeof env.total === 'undefined') env.total = cnt; if (env.total != env.killed.length + env.killFailed.length) { // log("again, " + cnt + ", " + env.killed.length + ", " + // env.killFailed.length); setTimeout(function() { stopChildren(cb, arr, env); }, 200); } else { if (env.total == 0) { env.report.push('There are no children currently monitored, ' + 'so there is nothing to kill.'); } else { env.report = ['Initiating ' + env.total + ' children kill:'] .concat(env.report); } // preparing return message var killed = env.killed.length; var failed = env.killFailed.length; if (!failed) { env.msg = strings.get_dataOK; if (massiveKiller) env.msg += strings.monitor_shutdown; else env.msg += killed === 1 ? 'The process with given path was killed' : 'All ' + killed + ' processes with given path were killed'; } else { env.msg = strings.command_refuse + '\nSome of the processes could not be killed: ' + env.killFailed.join(', '); } var report = env.report.join('\n'); log(report); cb(env); childrenStopInProgress = false; } }; /** * Checks, whether the command was made by the same user, which started the * monitor. * * @param {string} cmd - command to check. * @param {object} json - json to check. * @param {object} res - http result object where to send response in case of * error. * @return {boolean} - true, if command is allowed to execute, false if was * refused. */ var checkUID = function(cmd, json, res) { // no uid checking for windows if (isWindows) { return true; } var error = null; if (typeof json.uid === 'undefined') { error = 'Uid was not provided with command ' + cmd; } else { var uid = parseInt(json.uid); if (isNaN(uid)) { error = 'Wrong uid (' + json.uid + ') provided with command ' + cmd; } else { var users = monConfig.monitor.users; if (users) { if (!util.isArray(users)) { error = 'monitor.users in config file is expected to be an array.'; } else { if (!monConfig.monitor.uids) { // monitor.uids - dynamically evaluated uid from user names monConfig.monitor.uids = {}; for (var a = 0, len = users.length; a < len; a++) { var ret = jxcore.utils.cmdSync('id -u ' + users[a]); var _uid = parseInt(ret.out); if (isNaN(_uid)) { log('Cannot get uid of a user ' + users[a] + ': ' + ret.out.toString().trim()); } else { monConfig.monitor.uids[_uid] = true; } } } } } var uids = monConfig.monitor.uids; if ((uids && uids[uid]) || process.getuid() === uid || uid === 0) { // force root can close return true; } else { error = 'Refused to run the command since it is made by a ' + 'different user.'; } } } if (error) { log(error); res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(error + strings.command_refuse); return false; } else { return true; } }; /** * Start the http server, which will serve as monitor. */ var startServer = function() { var __server = function(req, res) { if (exitting) return; var req_question = req.url == '/' + strings.send_question; var req_data = req.method == 'POST' && req.url == '/' + strings.send_data; var req_command = req.method == 'POST' && req.url == '/' + strings.send_command; var req_json = req.url.slice(0, 5) == '/json'; var req_logs = req.url.slice(0, 5) == '/logs'; var parsed = _url.parse(req.url, true); // for example /json?silent=true would not save to log the fact, that the // request was received var silent = (parsed.query && typeof parsed.query.silent !== 'undefined') || req.url.indexOf('favicon.ico') > -1; // for example /logs?html returns html formatted logs (with
instead of // \n) var _html = parsed.query && typeof parsed.query.html !== 'undefined'; var htmlize = function(str) { if (!_html) return str; return str.replace(new RegExp('\n', 'g'), '
').replace( new RegExp(' ', 'g'), '   '); }; if (!silent) { log('Monitor received request: ' + req.url); } if (req_question) { res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(strings.get_answer); return; } // here monitor is receiving data about process sent from that process if (req_data) { var body = ''; req.on('data', function(data) { body += data; }); req .on( 'end', function() { if (!body) { return; } res.writeHead(200, { 'Content-Type' : 'text/html' }); try { var json = JSON.parse(body.toString()); json.respawnAttemptID = 0; json.old_pid = getInt(json.old_pid); if (!monitoredProcesses[json.pid]) { if (json.old_pid && (killedProcesses[json.old_pid] || !monitoredProcesses[json.old_pid])) { // this is the case, when app subscribes back with a new // pid, // but the old pid is not monitored any more (or was // already killed) log('Could not find the app with the old PID: ' + json.old_pid); res.end(strings.command_refuse + '|' + strings.command_kill); return; } if (json.old_pid) { // app comes back after being restarted log('Found app with the old PID: ' + json.old_pid); json['respawn_id'] = getInt(json.respawn_id); monitoredProcesses[json.pid] = json; // mark old for removal monitoredProcesses[json.old_pid].remove = true; } else { // app send data to monitor for the first time // (subscription) json['respawn_id'] = 0; monitoredProcesses[json.pid] = json; } } else { // just another request of monitored app monitoredProcesses[json.pid].threadIDs .push(json.threadIDs[0]); } res.end(strings.get_dataOK); setTimeout(checkProcesses, monConfig.monitor.check_interval); log('Received data from process. ' + body); } catch (ex) { res.end("That's not it."); logError("That's not it." + ex); } }); return; } if (req_json) { var arr = []; for (var pid in monitoredProcesses) { if (monitoredProcesses.hasOwnProperty(pid) && !monitoredProcesses[pid].remove) arr.push(monitoredProcesses[pid]); } var ret = JSON.stringify(arr, function(k, v) { return k === 'child' ? undefined : v; }, 4); arr = null; res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(htmlize(ret)); ret = null; return; } if (req_logs) { if (fs.existsSync(monLogPath)) { try { ret = fs.readFileSync(monLogPath).toString(); } catch (ex) { ret = 'Cannot read log file from ' + monLogPath + '
. Exception: ' + ex.message; } } else { ret = 'The log file does not exist: ' + monLogPath; } res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(htmlize(ret)); ret = null; return; } if (req_command) { var body = ''; req.on('data', function(data) { body += data; }); req.on('end', function() { if (!body) return; try { var json = JSON.parse(body.toString()); var cmd = json[strings.send_command_hash] || null; if (cmd == argNames.stop_monitor) { if (!checkUID(cmd, json, res)) return; stopChildren(function(env) { res.on('finish', function() { // give a little bit more time for client to receive the message setTimeout(process.exit, 200); }); res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(env.msg); monitoredProcesses = null; log('Monitor received the stop request. Exiting.'); exitting = true; // make sure it exits anyway setTimeout(process.exit, 1000).unref(); }); return; } if (cmd == argNames.leave_me && json.pid) { var s = 'Monitor received request from pid ' + json.pid + ' to stop its monitoring'; if (monitoredProcesses[json.pid]) { delete monitoredProcesses[json.pid]; } else { s += ', but this pid is not monitored. Request ignored'; } log(s + '.'); res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(strings.get_dataOK); return; } if (cmd == argNames.leave_me && json.path) { if (!checkUID(cmd, json, res)) { return; } var s = 'Monitor received request for ' + json.path + ' to get killed'; var arr = {}; var ln = 0; for (var o in monitoredProcesses) { var proc = monitoredProcesses[o]; if (monitoredProcesses.hasOwnProperty(o) && proc && proc.path == json.path && !proc.remove) { // try to kill immediately if (proc.child) { try { proc.child.kill(); // we don't care whether it succeeded or not // stopChildren will check it out } catch (ex) { } } proc.killAttempt = 0; arr[o] = proc; ln++; } } if (ln === 0) { s += ', but this path is not monitored. Request ignored'; log(s + '.'); res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(strings.get_dataOK + 'This path is not monitored. Request ignored'); } else { log(s + '.'); stopChildren(function(env) { res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(env.msg); }, arr); } return; } // heartbeat by main monitor's server if (cmd == argNames.checkPath && json.path) return checkHeartbeat(res, json); } catch (ex) { log('Error while processing the request: ' + ex); res.end("That's not it."); } }); return; } // if arrived here, just return nothing res.end(); }; if (!https_keys) { http = _http; http.createServer(__server).listen(monConfig.monitor.port, monConfig.monitor.host); } else { http = _https; var https_options = { key: fs.readFileSync(https_keys.httpsKeyLocation), cert: fs.readFileSync(https_keys.httpsCertLocation) }; http.createServer(https_options, __server).listen(monConfig.monitor.port, monConfig.monitor.host); } process.on('uncaughtException', function(ex) { log('Monitor process received uncaughtException: ' + ex + '.', true); log(ex.stack.toString(), true); }); process.on('exit', function(code) { log('Monitor process is exiting with code ' + code + '.'); }); log('JXcore monitoring is started.', true); log('Monitor started on ' + monitorUrl); iAmTheMonitor = true; initRemoteAccess(monConfig); }; // ************************ monitor called from command line with: stop or // restarting /** * Send to the monitor request to stop, and eventually starts it again * afterwards. * * @param {function} cb * - callback. * @param {boolean} restart * - If true, the current process will create new http server * to serve as a monitor. */ var stopOrRestart = function(cb, restart) { isMonitorOnline(function(err, txt) { if (!err) { attemptID = 0; if (!restart) { stopServer(cb); } else { stopServer(function(err, txt) { if (err) { if (cb) { cb(true, txt); } else { throwError(txt); } } else { // let's give time for previous monitor process to exit setTimeout(function() { if (cb) { cb(false, txt); } startServer(); }, 1000); } }); } } else { var cmd = parsedArgv[argNames.stop_monitor] ? argNames.stop_monitor : argNames.restart_monitor; var s = "Monitor is not running. Cannot execute '" + cmd + "' command."; if (cb) { cb(true, s); logError(s); } else { throwError(s); } } }); }; // ************************ ************************ ************************ // ************************ exported methods for monitor process // ************************ ************************ ************************ /** * Tries to connect to a monitor in order to check, if it's online. * * @param {function} cb * - Callback will receive 2 params (err true/false, txt). */ exports.checkMonitorExists = function(cb) { monLogPath = findLogPath(); isMonitorOnline(cb); }; /** * Start the http server, which will serve as monitor, * * @param {function} cb * - Callback is optional. When provided will receive 2 * params (err true/false, txt). */ exports.startMonitor = function(cb) { monLogPath = findLogPath(); startServer(); }; /** * Start the http server, which will serve as monitor, but only if no monitor is * already running. * * @param {function} cb * - Callback is optional. When provided will receive 2 * params (err true/false, txt). */ exports.startIfNotExists = function(cb) { monLogPath = findLogPath(); isMonitorOnline(function(err, txt) { if (!err) { var s = 'Another monitor is already running'; if (cb) { cb(true, s); logError(s); } else { throwError(s); } } else { startServer(); } }); }; /** * Send to the monitor request to stop itself. * * @param {function} cb * - Callback is optional. When provided will receive 2 * params (err true/false, txt). */ exports.stopMonitor = function(cb) { monLogPath = findLogPath(); stopOrRestart(cb, false); }; /** * Send to the monitor request to stop itself, and then this (current) process * will create new http server to serve as a monitor. * * @param {function} cb * - Callback is optional. When provided will receive 2 * params (err true/false, txt). */ exports.restartMonitor = function(cb) { monLogPath = findLogPath(); stopOrRestart(cb, true); }; // ************************ ************************ ************************ // ************************ exported methods for monitored app process // ************************ ************************ ************************ var checkForSID_MT = function(sid) { var exists = false; if (jxcore.store.shared.safeBlock) { jxcore.store.shared.safeBlock(sid, function() { exists = jxcore.store.shared.exists(sid); if (!exists) { jxcore.store.shared.set(sid, 'some_value'); } }); } // for win, because safeBlock is not yet implemented else { exists = jxcore.store.shared.exists(sid); if (!exists) { jxcore.store.shared.set(sid, 'some_value'); } } return exists; }; var subscribeSID = '_jx_monitor_subscribe_by_thread'; var unsubscribeSID = '_jx_monitor_UNsubscribe_by_thread'; /** * Send to the monitor request to subscribe process.pid for monitoring. If * monitor is not online, throws an error. This method is intended to be called * from an app. * * @param {function} cb * - Callback is optional. When provided will receive 2 * params (err true/false, txt). */ exports.followMe = function(cb, waitcb) { // do not write to log on app side monLogDisabled = true; if (checkForSID_MT(subscribeSID)) { if (cb) { cb(true, 'Another subthread already is trying to subscribe to the monitor.'); } return; } isMonitorOnline(function(err, txt) { if (!err) { attemptID = 0; var delay = monConfig.monitor.start_delay || 0; if (delay) { if (waitcb) { waitcb(delay); } setTimeout(function() { subscribe(cb); }, delay).unref(); } else { subscribe(cb); } } else { if (cb) { cb(true, 'Cannot subscribe to the monitor. ' + txt); } } }); // allow to unsubscribe again jxcore.store.shared.remove(unsubscribeSID); }; /** * Send to the monitor request to unsubscribe process.pid from monitoring. If * monitor is not online, throws an error. * This method is intended to be * called from an app. * * @param {function} cb * - Callback is optional. When provided will receive 2 * params (err true/false, txt). */ exports.leaveMe = function(cb) { // do not write to log on app side monLogDisabled = true; if (checkForSID_MT(unsubscribeSID)) { if (cb) { cb(true, 'Another subthread already is trying to unsubscribe ' + 'from the monitor.'); } return; } isMonitorOnline(function(err, txt) { if (!err) { attemptID = 0; unsubscribe(cb); } else { if (cb) { cb(true, 'Cannot unsubscribe from the monitor. ' + txt); } } }); // allow to subscribe again jxcore.store.shared.remove(subscribeSID); }; exports.releasePath = function(path, cb) { // do not write to log on app side monLogDisabled = true; isMonitorOnline(function(err, txt) { if (!err) { attemptID = 0; killPath(path, cb); } else { if (cb) { cb(true, 'Cannot kill the given path. ' + txt); } } }); }; exports.checkPath = function(appPath, options, cb) { if (typeof options === 'function') { cb = options; options = {}; } if (!cb || typeof cb !== 'function') throw new Error('Callback required for jxcore.monitor.check().'); if (!options) options = {}; var cfg = monConfig.monitor; // jxcore.utils.console.info(cfg); var options = { host: options.host || cfg.host, port: options.port || cfg.port, path: '/' + strings.send_command, method: 'POST', rejectUnauthorized: false }; var json = { path: appPath, pass_phrase: options.pass_phrase }; json[strings.send_command_hash] = argNames.checkPath; var req = _https.request(options, function(res) { var response = ''; res.on('data', function(d) { response += d; }); res.on('end', function() { req.connection.destroy(); cb(false, response); }); }); req.end(JSON.stringify(json)); req.on('error', function(e) { req.connection.destroy(); cb(true, e); }); }; /** * Check validity of remote access configuration and creates a dedicated https * server for that * * @param {object} monConfig - configuration. * @return {object} - remote access configuration. */ var initRemoteAccess = function(monConfig) { var cfg = monConfig.monitor; var ra = monConfig.monitor.remote; // remote access config is not obligatory if (!ra) return; var _logError = function(txt) { var cl = jxcore.utils.console.setColor; log(cl('The remote access cannot be activated:\n', 'red') + cl(txt, 'magenta')); }; if (!ra.https) return _logError('This feature can work only through HTTPS, ' + 'but the certificates paths are not provided in jx.config.\n'); var options = checkCertFiles(ra.https); if (typeof options === 'string') return _logError(options); if (ra.port === cfg.port) return _logError('This feature needs to use separate port ' + 'than the monitor.'); if (!ra.port) ra.port = cfg.port + 1; ra.urlString = ra.host ? 'https://' + ra.host + ':' + ra.port : 'on HTTPS, on all IP addresses and port ' + ra.port; var srv = _https.createServer(options, function(req, res) { if (exitting) return; var req_command = req.method == 'POST' && req.url == '/' + strings.send_command; if (req_command) { var body = ''; req.on('data', function(data) { body += data; }); req.on('end', function() { if (!body) return; try { var json = JSON.parse(body.toString()); var cmd = json[strings.send_command_hash] || null; // heartbeat by dedicated monitor's server if (cmd == argNames.checkPath && json.path) return checkHeartbeat(res, json); } catch (ex) { log('Error for remote access call:' + ex); } }); return; } log('Remote access invalid call: ' + req.url); }); if (ra.host) srv.listen(ra.port, ra.host); else srv.listen(ra.port); log(jxcore.utils.console.setColor('Remote access enabled', ra.urlString, 'green'), true); return ra; }; /** * Check validity of https certificate files from config file * * @param {object} obj - options. * @return {*} - Returns error string or loaded certificate files (if * everything is ok). */ var checkCertFiles = function(obj) { // od param names support if (!obj.key && obj.httpsKeyLocation) obj.key = obj.httpsKeyLocation; if (!obj.cert && obj.httpsCertLocation) obj.cert = obj.httpsCertLocation; var options = {}; var arr = ['key', 'cert']; for (var o = 0, len = arr.length; o < len; o++) { var _name = arr[o]; if (!obj[_name]) return 'The `' + _name + '` definition not found.'; if (!fs.existsSync(obj[_name])) return 'The `' + _name + '` (' + obj[_name] + ') file not found.'; try { options[_name] = fs.readFileSync(obj[_name]); } catch (ex) { return 'Cannot read the `' + _name + '` (' + obj[_name] + ') file.'; } } return options; }; var checkHeartbeat = function(res, json) { var cnt = 0; for (var o in monitoredProcesses) { if (monitoredProcesses.hasOwnProperty(o) && monitoredProcesses[o].path == json.path) { cnt++; } } res.writeHead(200, { 'Content-Type' : 'text/html' }); res.end(cnt + ''); }; var getInt = function(val, defaultVal) { if (!defaultVal) defaultVal = 0; val = parseInt(val); return isNaN(val) ? defaultVal : val; }; exports.respawned = getInt(process.env[argNames.monitor_respawn_id]); // Copyright & License details are available under JXCORE_LICENSE file var method = { define: function() { if (process.argv[1].indexOf('mt-keep:') >= 0 || process.argv[1] == 'mt-keep') { process.keepAlive(); } try { require.resolve(process.argv[2]); } catch (e) { console.error('could not resolve ', process.argv[2]); process.exit(1); } require(process.argv[2], null, null, true); } }; var parsed = jxcore.utils.argv.parse(); var mter = parsed.mt || parsed['mt-keep']; if (!mter || !mter.isInt) { console.log('mt/mt-keep count must be a number! (max:16)'); console.log(''); console.log('usage: mt:4'); process.exit(1); } jxcore.tasks.setThreadCount(mter.asInt); jxcore.tasks.on('message', function(m) { process.stdout.write(m); }); jxcore.tasks.runOnce(method); // Copyright & License details are available under JXCORE_LICENSE file exports.install = function() { var cc = jxcore.utils.console; var fs = require('fs'); var pathModule = require('path'); var cnf = require('_jx_config'); var jxpath = cnf.__jx_global_path; var parsedArgv = jxcore.utils.argv.parse(); var autoremove_err = false; var autoremove_arr = null; // check for --autoremove if (parsedArgv.autoremove) { autoremove_arr = parsedArgv.autoremove.splitBySep(); if (!autoremove_arr) { autoremove_err = 'Invalid --autoremove value: ' + (parsedArgv.autoremove.value || '--empty--') + '.'; } } if (process.argv.length < 2 || autoremove_err) { if (autoremove_err) cc.error(autoremove_err); cc.log('usage: install [package name]'); cc.log('optional: install [package name]@[version]'); cc.log('optional: install -g [package name]'); cc.log("optional: install [package name] --autoremove '*.gz;samples'"); cc.log(''); process.exit(); return; } // downloads the file though proxy, if --proxy or --https-proxy argv is // provided var download_through_proxy = function(url, target, cb) { var url_module = require('url'); var parsed_url = url_module.parse(url); var proxy_url = parsed_url.protocol.toLowerCase() === 'https:' ? jxcore.utils.argv.getValue('https-proxy') : jxcore.utils.argv.getValue('proxy'); if (!proxy_url) return false; var parsed_proxy_url = url_module.parse(proxy_url); var http = require('http'); var https = require('https'); // tunnel options var opts = { host: parsed_proxy_url.hostname, port: parsed_proxy_url.port, method: 'CONNECT', path: parsed_url.hostname, headers: { Host: parsed_url.hostname } }; if (parsed_proxy_url.auth) opts.headers['Proxy-Authorization'] = 'Basic ' + new Buffer(parsed_proxy_url.auth).toString('base64'); http.request(opts).on('connect', function(res, socket, head) { https.get({ host: parsed_url.hostname, path: parsed_url.path, socket: socket, agent: false }, function(res) { var file = fs.createWriteStream(target); res.on('data', function(chunk) { file.write(chunk); }).on('end', function() { file.end(); }); file.on('finish', function() { file.close(); setTimeout(cb, 1000); }); }); }).on('error', function(e) { console.error(e); process.exit(1); }).end(); return true; }; // legacy support for running: jx ~/.jx/npm // rather than: jx ~/.jx/npm/bin/npm-cli.js var useMain = parsedArgv['use-main']; if (useMain) { process.env.JX_NPM_USE_MAIN = true; jxcore.utils.argv.remove('--use-main', true); } // we need to remove it before passing argv to npm jxcore.utils.argv.remove('--autoremove', true); var args = process.argv; var download = function(url, target, cb) { if (download_through_proxy(url, target, cb)) return; var http = require('https'); var req = http.request(url, function(res) { var file = fs.createWriteStream(target); res.on('data', function(chunk) { file.write(chunk); }).on('end', function() { file.end(); }); file.on('finish', function() { file.close(); setTimeout(cb, 1000); }); }); req.end(); }; var name = ''; var npm_basename = 'npmjxv314.jx'; var npm_str = 'https://jxcore.azureedge.net/npmjx/' + npm_basename; var isWindows = process.platform === 'win32'; var isAndroid = process.platform === 'android'; var homeFolder = process.env.HOME || process.env.USERPROFILE || process.env.HOMEPATH; var finalFolder = process.__npmjxpath || homeFolder; var jxFolder = pathModule.join(finalFolder, '.jx'); var targetBin = pathModule.join(jxFolder, useMain ? 'npm' : 'npm/bin/npm-cli.js'); var npmrcPath = pathModule.join(jxFolder, 'npm/npmrc'); var chownIfSudo = function(dir) { // do it only if it was called with sudo if (!process.env.SUDO_UID || !process.env.SUDO_GID) return; // do it only if it's located under home directory if (dir.indexOf(homeFolder) !== 0) return; if (isWindows || isAndroid || !fs.existsSync(dir)) return; var error = false; try { var _stat = fs.statSync(dir); // skip if user's ownership is already set if (_stat.uid != process.env.SUDO_UID && _stat.gid != process.env.SUDO_GID) { var chownStr = 'chown -R ' + process.env.SUDO_UID + ':' + process.env.SUDO_GID + ' '; var ret = jxcore.utils.cmdSync(chownStr + '"' + dir + '"'); if (ret.exitCode) error = ret.out; } } catch(ex) { error = ex; } if (error) { jxcore.utils.console.warn('Cannot chmod on', dir); jxcore.utils.console.log(error.toString()); } }; function Install() { var arr = []; if (name.trim() == '-global') { name = '-g'; } if (name.indexOf('-') === 0 && name.indexOf('--') < 0 && name.trim() != '-g') { args[2] = args[2].substr(1); arr.push(targetBin); cmd = true; } else if (args[1] === 'npm') { arr.push(targetBin); cmd = true; } else { if (name.trim() == '-g' && jxpath) { args[args.length] = '--prefix=' + jxpath; } arr.push(targetBin); arr.push('install'); } var found = false; // copying npm settings, if available if (pathModule.basename(targetBin) === 'npm') { var ret = jxcore.utils.cmdSync('npm config ls -l'); if (!ret.exitCode && ret.out) { fs.writeFileSync(npmrcPath, ret.out); found = true; } } if (!found) { arr.push('--loglevel'); arr.push('http'); if (!isWindows) { // https://docs.npmjs.com/misc/config#color // Default: true on Posix, false on Windows arr.push('--color'); arr.push('true'); } } arr = arr.concat(args.slice(2)); if (autoremove_arr && autoremove_arr.length) process.env.JX_NPM_AUTOREMOVE = JSON.stringify(autoremove_arr); // spawn allows to pass formatted output (colors) var child = require('child_process').spawn(process.execPath, arr, { stdio: 'inherit' }).on('close', function(code) { if (!code) { // let's set user's ownership for ~/.jx and ~/.npm chownIfSudo(jxFolder); chownIfSudo(pathModule.join(finalFolder, '.npm')); } // exit with same exit code process.exit(code); }); } var delTree = function(loc) { if (fs.existsSync(loc)) { var _files = fs.readdirSync(loc); for (var o in _files) { if (!_files.hasOwnProperty(o)) continue; var file = _files[o]; var _path = loc + pathModule.sep + file; if (!fs.lstatSync(_path).isDirectory()) { try { fs.unlinkSync(_path); } catch (e) { jxcore.utils.console.write('Permission denied ', 'red'); jxcore.utils.console.write(loc, 'yellow'); jxcore.utils.console.log( ' (do you have a write access to this location?)'); } continue; } delTree(_path); } fs.rmdirSync(loc); } }; function tryNPM() { var forced = false; if (!fs.existsSync(jxFolder + pathModule.sep + process.jxversion)) { forced = true; } if (!forced && fs.existsSync(jxFolder + pathModule.sep + 'npm')) { Install(); return; } cc.log('Preparing NPM for JXcore (' + process.jxversion + ') for the first run', 'yellow'); if (!fs.existsSync(jxFolder)) { var ec = jxcore.utils.cmdSync('mkdir ' + (isWindows ? '' : '-p ') + '"' + jxFolder + '"'); if (ec.exitCode != 0 || !fs.existsSync(jxFolder)) { console.error( 'Make sure the user account has a write permission to ' + "it's home folder. >> " + ec.out + "\n Consider using a custom path from jx.config file's " + "'npmjxPath' property."); try { process.exit(1); } catch (e) { } } } if (forced) { delTree(jxFolder + pathModule.sep + 'npm'); fs.writeFileSync(jxFolder + pathModule.sep + process.jxversion, '1'); } targetBin = jxFolder + pathModule.sep + npm_basename; download(npm_str, targetBin, function() { Install(); }); } if (args.length > 2) name = args[2]; tryNPM(); }; // Copyright & License details are available under JXCORE_LICENSE file var uw = process.binding('thread_wrap'); var jxutil = process.binding('jxutils_wrap'); var _util = require('util'); var osInfo = null; exports.smartRequire = function(req) { function _smartRequire(_req) { this.req = _req; var _this = this; this.require = function(a, b, c, d) { try { return _this.req(a, b, c, d); } catch (e) { if (!(/[\/\\.]/.test(a))) { exports.console.log('Trying NPM for', a, 'yellow'); var str = process.argv[0] + ' install ' + a; if (process.isPackaged) { str = 'jx install ' + a; } var ret = exports.cmdSync(str); if (ret.exitCode == 0) { exports.console.log('[OK] Installed', a, 'green'); } else if (process.isPackaged) { exports.console.log('[FAILED] Installing', a, 'red'); exports.console.log( 'When embedded, this feature expects JXcore available via ' + "'jx' on the system path", 'yellow'); } } return _this.req(a, b, c, d); } }; } return new _smartRequire(req).require; }; exports.OSInfo = function() { if (osInfo) return osInfo; var info = exports.getOS().toLowerCase(); osInfo = { isMobile: false, isIOS: false, isAndroid: false, isWinRT: false }; osInfo.fullName = info; osInfo.is64 = /x64/.test(info); osInfo.is32 = !osInfo.is64; osInfo.isARM = /arm/.test(info); osInfo.isMipsel = /mips/.test(info); osInfo.isWinRT = /winrt/.test(info); if (osInfo.isWinRT) osInfo.OS_STR = 'winrt'; if (/mobile/.test(info)) { osInfo.isMobile = true; osInfo.isIOS = /ios/.test(info); osInfo.isAndroid = /android/.test(info); if (osInfo.isIOS) osInfo.OS_STR = 'ios'; if (osInfo.isAndroid) osInfo.OS_STR = 'android'; } else { osInfo.isUbuntu = /ubuntu/.test(info); if (!osInfo.isUbuntu) { osInfo.isDebian = /debian/.test(info) || /raspberrypi/.test(info); } else osInfo.isDebian = false; osInfo.isMobile = false; osInfo.isMac = /osx/.test(info); osInfo.isRH = /red hat/.test(info); osInfo.isSuse = /suse/.test(info); osInfo.isBSD = /bsd/.test(info); osInfo.isArch = /arch/.test(info); osInfo.isWindows = /win/.test(info); osInfo.isGentoo = /gentoo/.test(info); osInfo.isLinux = /linux/.test(info); if (osInfo.isUbuntu) osInfo.OS_STR = 'ub'; else if (osInfo.isDebian) osInfo.OS_STR = 'deb'; else if (osInfo.isMac) osInfo.OS_STR = 'osx'; else if (osInfo.isRH) osInfo.OS_STR = 'rh'; else if (osInfo.isSuse) osInfo.OS_STR = 'suse'; else if (osInfo.isBSD) osInfo.OS_STR = 'bsd'; else if (osInfo.isWindows) osInfo.OS_STR = 'win'; else if (osInfo.isArch) osInfo.OS_STR = 'ark'; else if (osInfo.isGentoo) osInfo.OS_STR = 'gen'; else if (osInfo.isLinux) osInfo.OS_STR = 'linux'; else throw new Error('This operating system is not supported (' + info + ')'); } if (osInfo.isARM) { osInfo.OS_STR += 'ARM'; if (osInfo.is64) osInfo.OS_STR += '64'; } else if (osInfo.isMipsel) { osInfo.OS_STR += 'MIPS'; } else { osInfo.OS_STR += (osInfo.is64) ? '64' : '32'; } return osInfo; }; exports.pause = function(check_interval) { if (check_interval < 0) { throw new Error('jxcore.utils.pause interval can not be smaller than 0'); } jxutil.runLoop(check_interval || 1); }; exports.jump = function() { if (!jxutil.runLoop(-1)) { console.error( "jump interrupted. Make sure the thread wasn't paused already"); } }; exports.continue = function() { jxutil.runLoop(); }; var lastCall = null, checkInter = null; var _getCPU = function(cb, timer) { if (!timer) { var q = Date.now(); if (lastCall) { timer = q - lastCall; } else timer = 1000; lastCall = q; } if (!cb) { throw new Error('getCPU expects (function, int)'); } var loop = 250; jxutil.getCPU(Date.now(), loop); var left = 0; var cpu_usage = 0; setTimeout(function() { jxutil.getCPU(Date.now(), loop); var cpu_inter = setInterval(function() { left += loop; cpu_usage += jxutil.getCPU(Date.now(), loop); if (left >= timer) { clearInterval(cpu_inter); cb((cpu_usage / (timer / loop)), timer); } }, loop); },loop); }; exports.getCPU = function(cb, timer) { if (checkInter && cb) { throw new Error('You can not run multiple instances of getCPU. ' + 'Call getCPU() without parameters to shutdown the previous one'); } if (checkInter) { clearInterval(checkInter); return; } var haveIt = false; checkInter = setInterval(function() { if (!haveIt) { haveIt = true; _getCPU(function(usage, tm) { haveIt = false; cb(usage, tm); }, timer); } }, timer); }; exports.cmdSync = function(command) { if (!command) throw 'execSync command can not be ' + (command); if (process.platform === 'win32') command = '"' + command + '"'; var arr = jxutil.execSync(command + ' 2<&1'); var res = {out: arr[0], exitCode: arr[1]}; return res; }; exports.getOS = function() { if (process.platform == 'darwin' || process.platform == 'win32' || process.platform == 'winrt') { if (process.platform == 'darwin') return 'OSX-' + process.arch; else if (process.platform == 'winrt') return 'WINRT-' + process.arch; return 'WIN-' + process.arch; } else if (process.platform == 'ios' || process.platform == 'android' || process.platform == 'winrt') { return process.platform + '-' + process.arch + ' (mobile)'; } else { var fs = require('fs'); if (fs.existsSync('/proc/version')) { var file = fs.readFileSync('/proc/version') + ''; var pre_defineds = { 'sourcery codebench': 'debian', 'linaro': 'debian', 'red hat': 1, 'ubuntu': 1, 'suse': 1, 'debian': 1, 'gentoo': 1 }; var loc = 0; for (var o in pre_defineds) { if (!pre_defineds.hasOwnProperty(o)) continue; loc = file.toLowerCase().indexOf(o); if (loc >= 0) { if (pre_defineds[o] !== 1) { return pre_defineds[o] + '-' + process.arch; } break; } } if (loc > 0) { var loc2 = file.indexOf(')', loc); if (loc2 < 0) loc2 = file.indexOf(' ', loc); file = file.substr(loc, loc2 - loc); return file + '-' + process.arch; } var res = exports.cmdSync('uname -msrn'); if (res.exitCode === 0) return res.out; return file; } else { return process.platform + '-' + process.arch; } } }; var mults = [1, 255, 255 * 255, 255 * 255 * 255, 255 * 255 * 255 * 255, 255 * 255 * 255 * 255 * 255, 255 * 255 * 255 * 255 * 255 * 255, 255 * 255 * 255 * 255 * 255 * 255 * 255]; exports.bufferID = function(tag) { if (!tag || !tag.length) { return 0; } var val = 0; var n = tag.length, i = 0; while (n--) { var z = tag[n]; if (z > 0) { val += mults[i++] * z; } else { i++; } } return val; }; exports.uniqueId = function() { return jxutil.getUnique(); }; exports.isFunction = function(method) { return Object.prototype.toString.call(method) == '[object Function]'; }; // -------------- ANSI-COLOR var ANSI_CODES = { 'bold': ['\u001b[1m', '\u001b[22m'], 'italic': ['\u001b[3m', '\u001b[23m'], 'underline': ['\u001b[4m', '\u001b[24m'], 'inverse': ['\u001b[7m', '\u001b[27m'], 'black': ['\u001b[30m', '\u001b[39m'], 'red': ['\u001b[31m', '\u001b[39m'], 'green': ['\u001b[32m', '\u001b[39m'], 'yellow': ['\u001b[33m', '\u001b[39m'], 'blue': ['\u001b[34m', '\u001b[39m'], 'magenta': ['\u001b[35m', '\u001b[39m'], 'cyan': ['\u001b[36m', '\u001b[39m'], 'white': ['\u001b[37m', '\u001b[39m'], 'default': ['\u001b[39m', '\u001b[39m'], 'grey': ['\u001b[90m', '\u001b[39m'], 'bgBlack': ['\u001b[40m', '\u001b[49m'], 'bgRed': ['\u001b[41m', '\u001b[49m'], 'bgGreen': ['\u001b[42m', '\u001b[49m'], 'bgYellow': ['\u001b[43m', '\u001b[49m'], 'bgBlue': ['\u001b[44m', '\u001b[49m'], 'bgMagenta': ['\u001b[45m', '\u001b[49m'], 'bgCyan': ['\u001b[46m', '\u001b[49m'], 'bgWhite': ['\u001b[47m', '\u001b[49m'], 'bgDefault': ['\u001b[49m', '\u001b[49m'], 'clear': ['\033c\033[3J'] }; var ANSI_CODES_REGEX = {}; function setColor() { if (!arguments.length) return; if (process.env.NOCOLOR || process.env.NODE_DISABLE_COLORS) { str = _util.format.apply(this, arguments); return str; } var str_start = ''; var str_end = ''; var color = arguments[arguments.length - 1]; if (color && typeof color === 'string') { var color_attrs = color.split('+'); for (var i = 0, attr; attr = color_attrs[i]; i++) { if (ANSI_CODES[attr]) { str_start += ANSI_CODES[attr][0]; str_end = (ANSI_CODES[attr][1] || '') + str_end; } } } var arr = Array.prototype.slice.call(arguments); if (str_start) arr.pop(); return str_start + _util.format.apply(this, arr) + str_end; } var removeColors = function(txt) { for (var o in ANSI_CODES) { if (!ANSI_CODES.hasOwnProperty(o)) continue; var first = ANSI_CODES[o][0]; var second = ANSI_CODES[o][1]; if (!ANSI_CODES_REGEX[o]) { ANSI_CODES_REGEX[o] = []; if (first) ANSI_CODES_REGEX[o].push( new RegExp('\\' + first.replace('[', '\\['), 'g')); if (second) ANSI_CODES_REGEX[o].push( new RegExp('\\' + second.replace('[', '\\['), 'g')); } if (first) txt = txt.replace(ANSI_CODES_REGEX[o][0], ''); if (second) txt = txt.replace(ANSI_CODES_REGEX[o][1], ''); } return txt; }; var findColor = function() { if (!arguments.length) return; var color = arguments[arguments.length - 1]; if (color && typeof color === 'string') { var color_attrs = color.split('+'); if (ANSI_CODES[color_attrs[0]]) return color; } }; exports.console = {}; exports.console.setColor = setColor; exports.console.removeColors = removeColors; exports.console.log = function() { console.log(setColor.apply(null, arguments)); }; exports.console.info = function() { var color = findColor.apply(null, arguments); if (!color) { arguments.length++; arguments[arguments.length - 1] = 'green'; } console.info(setColor.apply(null, arguments)); }; exports.console.error = function() { var color = findColor.apply(null, arguments); if (!color) { arguments.length++; arguments[arguments.length - 1] = 'red'; } console.error(setColor.apply(null, arguments)); }; exports.console.warn = function() { var color = findColor.apply(null, arguments); if (!color) { arguments.length++; arguments[arguments.length - 1] = 'magenta'; } console.warn(setColor.apply(null, arguments)); }; exports.console.write = function() { process.stdout.write(setColor.apply(null, arguments)); }; exports.console.clear = function() { if (!arguments.length) { process.stdout.write(ANSI_CODES.clear[0]); return; } var color = findColor.apply(null, arguments); if (!color) { arguments.length++; arguments[arguments.length - 1] = 'clear'; } else { // clear should be always in front color = color.replace(/clear/g, '').replace(/\+\+/g, '+').trim(); if (!color) color = 'clear'; else color = 'clear+' + color; arguments[arguments.length - 1] = color; } console.log(setColor.apply(null, arguments)); }; exports.argv = require('_jx_argv'); // Copyright & License details are available under JXCORE_LICENSE file var uw = process.binding('thread_wrap'); var markers = Object.create(null); var events = { 'emptyQueue': [], 'message': [] }; var trackerId = 0; var cpuCount = 2; var cpuSet = false; var exiting = false; exports.setThreadCount = function(count) { if (process.subThread) { throw new Error( 'You can not change the thread count under a subthread.'); } // TODO(obastemur) use commons.h MAX_JX_THREADS if (count < 2 || count > 64) { throw new Error( 'setThreadCount - min 2, max 64'); } if (!process.__tasking) { cpuSet = true; cpuCount = count + 1; } }; exports.killThread = function(threadId, keep_execution) { if (threadId < 0 || threadId > 63) { throw new RangeError( 'Thread Id - min 0, max 63'); } uw.killThread(threadId, keep_execution); }; var sleep = function(timeout) { setTimeout(function() { jxcore.utils.continue(); }, timeout); jxcore.utils.pause(); }; exports.unloadThreads = function(already_exiting) { if (process.subThread) { throw new Error( 'You can not unload the threads under a sub thread. Try killThread.'); } if (already_exiting) { // TODO(obastemur) after embedding interface implemented remove this! var tcount = uw.threadCount(); if (tcount == 0) return; // give some time while (uw.threadCount() < tcount) { tcount = uw.threadCount(); if (tcount == 0) return; sleep(20); } } exports.runOnce(function() { process.unloadThread(); }, null, true, true); if (!already_exiting) { var ref_wait = setTimeout(function() { // dummy wait // TODO(obastemur) after embedding interface implemented remove this! }, 200); ref_wait.unref(); } }; var gcc_alive = false; exports.begin = function() { if (exiting) return; if (process.subThread) { throw new Error( 'You can not modify thread pool under a subthread.'); } if (!process.__tasking) { process.on('exit', function() { exiting = true; exports.unloadThreads(1); uw.setProcessExiting(false); }); // TODO(obastemur) get the number from commons.h MAX_JX_THREADS if (cpuCount > 64) { cpuCount = 64; } uw.setCPUCount(cpuCount); process.__tasking = true; } }; exports.jobCount = function() { return uw.jobsCount(); }; exports.forceGC = function() { uw.freeGC(); }; var dummy = function() { if (exiting) return; gcc_alive = uw.jobsCount() > 0; if (gcc_alive) return; if (cinter != null) { clearInterval(cinter); cinter = null; } if (trackerId != 0) { trackerId = 0; cbb = 0; markers = {}; if (events['emptyQueue'].length) { var arr = events['emptyQueue']; for (var o in arr) { if (o != null && arr.hasOwnProperty(o)) arr[o](); } } } }; var cinter = null; var cbb = 0; var runCinter = function() { if (cinter != null || exiting) return; cinter = setInterval(function() { if (cbb >= trackerId) { dummy(); } }, 250); }; var emitMessage = function(obj) { var t = (obj.threadId || obj.threadId === 0) ? obj.threadId : obj.tid; var d = (obj.params || obj.params === 0) ? obj.params : obj.data; exports.emit('message', t, d); }; var gcc = function(arr) { if (exiting) { return; } for (var o in arr) { if (o == null || !arr.hasOwnProperty(o)) continue; var obj = JSON.parse(arr[o]); if (!obj || obj._id == -2)// runOnce { cbb++; if (obj) delete obj; continue; } if (obj.threadId || obj.threadId === 0 || obj.tid || obj.tid === 0) { if (obj.resetMe) { cbb += obj.counter; // give a chance calling method to exit cbb--; var tot = 500; if (obj.threadId > 0) tot = 575 * (obj.threadId); var ref_wait = setTimeout(function() { if (exiting) return; // TODO(obastemur) REPLACE BELOW to new sleep->thread block check if (obj) uw.resetThread(obj.threadId); var ref_counter = setTimeout(function() { if (!process._MTED) { cbb++; } }, 1000); ref_counter.unref(); }, tot); ref_wait.unref(); } else if (obj.wait) { cbb -= obj.wait; } else if (events['message'].length) { emitMessage(obj); } delete obj; continue; } if (obj.reset) { delete obj; continue; } var cb = (obj._id || obj._id === 0) ? markers[obj._id] : 0; cbb++; if (!cb && obj.dummy) { delete obj; continue; } if (cb) { if (obj.dummy) { cb(null); } else { cb(null, obj.o); } delete markers[obj._id]; } delete obj; } delete arr; }; exports.getThreadCount = function() { if (!process.__tasking && !process.subThread) { return (cpuSet) ? cpuCount - 1 : 2; } return uw.getCPUCount(); }; exports.on = function(event, cb) { if (!event || !event.substr) { throw new TypeError('expects event_name as a string'); } var ee = events[event]; if (ee) { ee.push(cb); } }; exports.emit = function(event, p1, p2, p3) { if (events[event].length) { var zarr = events[event]; for (var zo in zarr) { if (zarr.hasOwnProperty(zo)) zarr[zo](p1, p2, p3); } } }; var taskId = 1; var isFunction = function(method) { return Object.prototype.toString.call(method) == '[object Function]'; }; var _activated = false; var getMethod = function(method) { var mt; if (!method) { throw new TypeError('jxcore.tasks requires a function body'); } if (!_activated) { _activated = true; } if (method.define || method.logic) { if (!method.define || !isFunction(method.define) && !method.define.substr) { throw new Error('Task object requires a task.define function.'); } if (!method.logic) { method.logic = function() { }; } var def = method.define.toString(); var ind = def.lastIndexOf('return '); if (ind > 0) { var q = def.indexOf('}', ind); var z = def.indexOf('}', q + 1); if (z < 0) { if (def.indexOf(';', ind) > 0) console.error('Warning! task.define can not return!'); } } mt = method.logic.toString() + '$$&JX;1$node$&JX;$' + def + '$$&JX;2$node$&JX;$' + method.waitLogic; } else { if (!isFunction(method)) { throw new TypeError( 'jxcore.tasks requires a function body'); } mt = method.toString(); } return mt; }; exports.addTask = function(method, param, cb) { if (param === undefined) param = 'null'; else param = JSON.stringify(param); if (arguments.length > 3) // pass-through deprecated usage. exports._addTask(method, param, cb, arguments[3]); else exports._addTask(method, param, cb); }; exports._addTask = function(method, param, cb) { var cbId = trackerId, tId; if (process.subThread) { throw new Error( 'You can not add a task under a subthread.'); } if (arguments.length > 3) { // handle deprecated usage: (method, param, cb, obj). var msg = '(jxcore.tasks) warning: Passing obj arguments when ' + 'creating tasks has been deprecated. See ' + 'https://github.com/jxcore/jxcore/issues/334#issuecomment-100581210'; if (process.throwDeprecation) throw new Error(msg); else if (process.traceDeprecation) console.trace(msg); else console.error(msg); if (cb) { var obj = arguments[3]; var depr_cb = cb; cb = function(err, result) { if (err) throw err; depr_cb(obj, result); }; } } else if (cb && cb.length === 1) { // handle deprecated usage: (method, param, function(result) {...}) var msg = '(jxcore.tasks) warning: Task callback functions ' + 'now take two arguments (err, result). See ' + 'https://github.com/jxcore/jxcore/issues/334'; if (process.throwDeprecation) throw new Error(msg); else if (process.traceDeprecation) console.trace(msg); else console.error(msg); var depr_cb = cb; cb = function(err, result) { if (err) throw err; depr_cb(result); }; } exports.begin(); if (method._taskId) { tId = method._taskId; method = null; } else { method._taskId = taskId; tId = method._taskId; taskId++; method = getMethod(method); } if (cb) { markers[cbId] = cb; } else { cbId = -1; } var err = uw.addTask(tId, method, param, cbId, false); if (err > 0) { throw new Error('Thread creation error. id:' + err); } trackerId++; if (cinter == null) { gcc_alive = true; runCinter(); } }; exports.runOnce = function(method, param, doNotRemember, skip_thread_creation) { if (param === undefined) param = null; else if (param !== null) param = JSON.stringify(param); exports._runOnce(method, param, doNotRemember, skip_thread_creation); }; exports._runOnce = function(method, param, doNotRemember, skip_thread_creat) { if (process.subThread) { throw new Error( 'You can not add a task under a subthread.'); } if (!skip_thread_creat) exports.begin(); if (method._taskId) { throw new Error('This method was already defined'); } if (param === undefined) { param = null; } var mt = getMethod(method); method._taskId = taskId; if (doNotRemember === undefined) doNotRemember = false; var err = uw.addTask(taskId, mt, param, -2, doNotRemember, skip_thread_creat); if (err > 0) { throw new Error('Thread creation error. id:' + err); } taskId++; trackerId += exports.getThreadCount(); if (!skip_thread_creat) { if (cinter == null) { gcc_alive = true; runCinter(); } } }; exports.register = function(method) { if (process.subThread) return; return exports.runOnce(method, null, false, true); }; exports.runOnThread = function(threadId, method, param, cb) { if (param === undefined) param = 'null'; else param = JSON.stringify(param); if (arguments.length > 4) // pass-through deprecated usage. exports._runOnThread(threadId, method, param, cb, arguments[4]); else exports._runOnThread(threadId, method, param, cb); }; exports._runOnThread = function(threadId, method, param, cb) { if (threadId >= cpuCount) { throw new Error( 'Given threadId does not exist. ' + 'You can change the number of threads from setThreadCount'); } if (process.subThread) { throw new Error( 'You can not add a task under a subthread.'); } if (arguments.length > 4) { // handle deprecated usage: (threadId, method, param, cb, obj). var msg = '(jxcore.tasks) warning: Passing obj arguments when ' + 'creating tasks has been deprecated. See ' + 'https://github.com/jxcore/jxcore/issues/334#issuecomment-100581210'; if (process.throwDeprecation) throw new Error(msg); else if (process.traceDeprecation) console.trace(msg); else console.error(msg); if (cb) { var obj = arguments[4]; var depr_cb = cb; cb = function(err, result) { if (err) throw err; depr_cb(obj, result); }; } } else if (cb && cb.length === 1) { // handle deprecated usage: (threadId, method, param, function(result) // {...}) var msg = '(jxcore.tasks) warning: Task callback functions ' + 'now take two arguments (err, result). See ' + 'https://github.com/jxcore/jxcore/issues/334'; if (process.throwDeprecation) throw new Error(msg); else if (process.traceDeprecation) console.trace(msg); else console.error(msg); var depr_cb = cb; cb = function(err, result) { if (err) throw err; depr_cb(result); }; } exports.begin(); var cbId = trackerId; if (cb) { markers[cbId] = cb; } else { cbId = -1; } var mt = getMethod(method); process.sendToThread(threadId, { '$runIn': 1, 'mt': mt, 'param': param, 'id': taskId, 'cbId': cbId }); taskId++; trackerId++; if (cinter == null) { gcc_alive = true; runCinter(); } }; if (!process.subThread) { process.on('threadMessage', function(rs) { gcc(rs); }); } // Copyright & License details are available under JXCORE_LICENSE file var $uw = process.binding('memory_wrap'); var $tw = process.binding('thread_wrap'); var $tm = process.binding('jxutils_wrap'); var _store = {}; _store.exists = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.existMap(process.threadId, key + ''); }; _store.set = function(key, str) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } if (!str && str !== 0 && str !== false) { throw new TypeError('null string can not be stored in the memory store'); } str = Buffer.isBuffer(str) ? str : str + ''; $uw.setMap(process.threadId, key.toString(), str); }; _store.get = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.getMap(process.threadId, key + ''); }; _store.getBuffer = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.getMap(process.threadId, key + '', true); }; _store.read = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.readMap(process.threadId, key + ''); }; _store.readBuffer = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.readMap(process.threadId, key + '', true); }; _store.remove = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } $uw.removeMap(process.threadId, key + ''); }; _store.shared = {}; _store.shared.exists = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.existsSource('#' + key + ''); }; _store.shared.set = function(key, str) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } if (!str && str !== 0 && str !== false) { throw new TypeError( 'null object can not be stored in the shared memory store'); } $uw.setSource('#' + key.toString(), Buffer.isBuffer(str) ? str : str + ''); }; _store.shared.setIfEqualsTo = function(key, str, value) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } if (!str && str !== 0 && str !== false) { throw new TypeError( 'null object can not be stored in the shared memory store'); } if (!value && value !== 0 && value !== false) { throw 'null object can not be compared in the shared memory store'; } str = Buffer.isBuffer(str) ? str : str + ''; value = Buffer.isBuffer(value) ? value : value + ''; return $uw.setSourceIfEqualsTo('#' + key, str, value); }; _store.shared.setIfNotExists = function(key, str) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } if (!str && str !== 0 && str !== false) { throw new TypeError( 'null object can not be stored in the shared memory store'); } str = Buffer.isBuffer(str) ? str : str + ''; return $uw.setSourceIfNotExists('#' + key, str); }; if (_store.shared.setIfNotExists('|store.shared', '1')) { $uw.setMapCount($tw.cpuCount()); } _store.shared.setIfEqualsToOrNull = function(key, str, value) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } if (!str && str !== 0 && str !== false) { throw new TypeError( 'null object can not be stored in the shared memory store'); } if (!value && value !== 0 && value !== false) { throw 'null object can not be compared in the shared memory store'; } str = Buffer.isBuffer(str) ? str : str + ''; value = Buffer.isBuffer(value) ? value : value + ''; return $uw.setSourceIfEqualsToOrNull('#' + key, str, value); }; _store.shared.get = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.getSource('#' + key); }; _store.shared.getBuffer = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.getSource('#' + key, true); }; _store.shared.readBuffer = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.readSource('#' + key, true); }; _store.shared.read = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } return $uw.readSource('#' + key); }; _store.shared.remove = function(key) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } $uw.removeSource('#' + key); }; var $jxt = process.binding('jxtimers_wrap'); _store.shared.expires = function(key, timer) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } try { var x = parseInt(timer); if (!x || isNaN(x)) throw new Error(); } catch (e) { throw new TypeError('timer has to be a positive integer number'); } if (!_store.shared.exists(key)) { throw new Error(key + ' was not exist inside the shared store'); } var was_alive_ = $jxt.startWatcher(); $tm.expirationSource('#' + key, timer); if (!was_alive_) { var temp_timer = setTimeout(function() { $jxt.forceCheckKeys(); }, timer + 1); temp_timer.unref(); } }; exports.store = _store; exports.store.shared.setBlockTimeout = function(total) { var n = 0; try { n = parseInt(total); } catch (e) { throw new TypeError('total may not be a number. ' + e); } if (n <= 0) { throw new TypeError('blockTimeout has to be a positive number'); } $uw.setSource('{blockTimeout}', new Buffer(total + '', 'binary')); }; exports.store.shared.getBlockTimeout = function() { var val = $uw.readSource('{blockTimeout}'); return (val != null) ? parseInt(val) : 10000; }; _store.shared.safeBlockSync = function(key, block, onerr) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } if (!block) return; if (!jxcore.utils.isFunction(block)) { return; } var val = -5; var name = key.toString(); var pid = process.threadId; if (!pid) { pid = -6; } pid = pid.toString(); if (!$uw.setSourceIfEqualsToOrNull('+' + name, pid + '', '-5')) { var dtBas = Date.now(); var tim = exports.store.shared.getBlockTimeout(); while (true) { if ($uw.setSourceIfEqualsTo('+' + name, pid + '', '-5')) { break; } if (Date.now() - dtBas > tim) { $uw.setSource('+' + name, new Buffer('-5', 'binary')); console.error('JXcore.SafeBlock recovered itself after ' + tim + ' seconds of waiting'); dtBas = Date.now(); tim = exports.store.shared.getBlockTimeout(); } } } var ex = null; try { block(); } catch (e) { ex = e; } $uw.setSource('+' + name, new Buffer('-5', 'binary')); if (onerr && ex != null) onerr(ex); }; var blockQueue = {}; _store.shared.safeBlock = function(key, block, onerr) { if (!key && key !== 0 && key !== false) { throw new TypeError('key can not be null for memory store item'); } if (!block) return; if (!jxcore.utils.isFunction(block)) { return; } var val = -5; var name = key.toString(); var pid = process.threadId; if (!pid) { pid = -6; } pid = pid.toString(); if (blockQueue[name]) { blockQueue[name].push([block, onerr]); } else { blockQueue[name] = [[block, onerr]]; var dtBas = Date.now(); var tim = exports.store.shared.getBlockTimeout(); var handleQueue = function() { var timeout = false; if (tim > 0 && Date.now() - dtBas > tim) { timeout = true; console.error('JXcore.SafeBlock recovered itself after ' + tim + 'ms of waiting'); dtBas = Date.now(); } if (blockQueue[name].length <= 0) { delete blockQueue[name]; } else if (timeout || $uw.setSourceIfEqualsToOrNull('+' + name, pid + '', '-5')) { for (var o in blockQueue[name]) { if (!blockQueue[name].hasOwnProperty(o)) continue; var ex = null; var funcs = blockQueue[name][o]; try { if (funcs && funcs[0]) { funcs[0](); } } catch (e) { ex = e; } if (funcs && funcs[1] && ex != null) { funcs[1](ex); } } delete blockQueue[name]; $uw.setSource('+' + name, new Buffer('-5', 'binary')); } else { setTimeout(handleQueue, 1); } }; setTimeout(handleQueue, 1); } }; // Copyright & License details are available under JXCORE_LICENSE file var tw = process.binding('thread_wrap'); var ex_data = process.binding('memory_wrap'); var path = require('path'); var strPath = (process.argv.length > 1) ? process.argv[1] : null; var mter = false, MTnoKeep = false; // inner methods are internal use only var inner = global.tools; delete global.tools; var resolved = ex_data.readSource('_EmbeddedSource.mainModule.filename'); var resolved_set = false; if (resolved) { resolved_set = true; require.main.filename = resolved; } // When embedded, embedding application provides the entry point via // process.argv // sub thread should be relying on the paths given by the embedder if (process.isEmbedded) { resolved = path.join(path.dirname(process.argv[0]), process.argv[1]); } else if (strPath && !process.isPackaged) { mter = (strPath.indexOf('mt:') >= 0 || strPath == 'mt'); MTnoKeep = mter; if (!mter) { mter = strPath == 'mt-keep' || strPath.indexOf('mt-keep:') >= 0; } if (mter) { process.argv[2] = path.resolve(process.argv[2]); if (!resolved) resolved = process.argv[2]; } else { process.argv[1] = path.resolve(process.argv[1]); if (!resolved) resolved = process.argv[1]; } if (process.argv[process.argv.length - 1] == undefined) { process.argv = process.argv.slice(0, process.argv.length - 1); } } if (!resolved_set) { require.main.filename = resolved; } if (require.main.fileSource) require.main.fileSource = null; var _waitCounter = 0; var setWaitCounter = function(counter) { if (counter === _waitCounter) return; _waitCounter = counter; inner.refWaitCounter(counter); }; var incWaitCounter = function() { setWaitCounter(_waitCounter + 1); }; var decWaitCounter = function() { setWaitCounter(_waitCounter - 1); }; var getWaitCounter = function() { return _waitCounter; }; process.keepAlive = function(ms) { if (process.__reset) return; incWaitCounter(); tw.sendToAll(-1, JSON.stringify({threadId: process.threadId, params: null, wait: 1}), process.threadId); if (ms) { setTimeout(function() { process.release(); }, ms, 1); } }; var restarted = false; process.release = function(customCounter) { if (getWaitCounter() <= 0) return; if (!process.__reset) customCounter = null; var num = customCounter ? customCounter : 1; if (!restarted && !process.__reset) { setTimeout(function() { if (process.__reset) { return; } if (getWaitCounter() < num) { num = getWaitCounter(); } if (num == 0) { return; } tw.sendToAll(-1, JSON.stringify({ threadId: process.threadId, params: null, wait: -1 * num}), process.threadId); setWaitCounter(getWaitCounter() - num); }, 50, 2); // hack } else { if (getWaitCounter() < num) { num = getWaitCounter(); } if (num == 0) { return; } tw.sendToAll(-1, JSON.stringify({ threadId: process.threadId, params: null, wait: -1 * num}), process.threadId); setWaitCounter(getWaitCounter() - num); } }; var embedFunc = function(_globals, fbody, methodBody, waitLogic) { var def = fbody.toString(); var n = def.lastIndexOf('}'); if (waitLogic) { methodBody += 'exports.waitFirst = true;'; } return _globals + '(' + def.substr(0, n) + '\n' + methodBody + '\n})();'; }; var isWindows = process.platform === 'win32'; var strGlobals = "/**/__dirname = '" + path.dirname(resolved) + "';__filename = '" + resolved + "';process.mainModule.filename='" + resolved + "';"; if (isWindows) { strGlobals = strGlobals.replace(/\\/g, '\\\\'); } var func = function(scr) { var name = '~NodeJXThread-' + scr[0]; var ind = scr[1].indexOf('$$&JX;1$node$&JX;$'); if (ind < 0) { ex_data.setMap(process.threadId, '*' + name, strGlobals + 'var ___method=' + scr[1] + ';' + 'exports.call = function(___cbid, ___param){' + 'var ___x=___method(___param);' + 'if(___x === undefined || ___cbid==-1)' + '{return JSON.stringify({"_id":___cbid, dummy:true})};' + 'return JSON.stringify({"_id":___cbid, "o":___x});' + '}'); } else { var strl = scr[1].substr(0, ind); var strd = scr[1].replace(strl + '$$&JX;1$node$&JX;$', '').trim(); var sub2 = false; ind = strd.indexOf('$$&JX;2$node$&JX;$'); if (ind >= 0) { sub2 = strd.substr(ind); strd = strd.substr(0, ind); sub2 = sub2.replace('$$&JX;2$node$&JX;$', '').trim(); if (sub2 != 'undefined' && sub2 != 'null') { sub2 = sub2 == 'true' ? true : false; } else { sub2 = false; } } ex_data.setMap(process.threadId, '*' + name, embedFunc(strGlobals, strd, ';var _____cl=false;var continueLogic=function(){}, ____back=[];' + 'var ___method=' + strl + ';exports.call = function(___cbid, ___param){if(exports.waitFirst){' + '____back.push( {c:___cbid, p:___param} );' + 'if(!_____cl){_____cl=true;process.keepAlive();' + 'continueLogic = function(){exports.waitFirst=null;process.release();' + 'for(var o in ____back){ if (!____back.hasOwnProperty(o)) continue;' + 'var res=exports.call(____back[o].c, ____back[o].p);' + 'if(res!=undefined && ____back[o].c>=0){/* _$__callBack(res); */}' + '};____back=[];' + '};' + '}return;};' + 'try{var ___x=___method(___param);' + 'if(___x==undefined || ___cbid==-1){' + 'return JSON.stringify({"_id":___cbid, dummy:true})};' + 'return JSON.stringify({"_id":___cbid, "o":___x});' + '}catch(e){console.log("error during task execution:",e);' + ' throw "task execution: " + e;}' + '};', sub2)); } }; var cnt = 0; var taskChecker; var inter; var cached = {}; var sleep = function(timeout) { setTimeout(function() { jxcore.utils.continue(); }, timeout); jxcore.utils.pause(); }; process.unloadThread = function() { restarted = false; inner.setThreadOnHold(1); jxcore.tasks.killThread(process.threadId, process.__reset); }; var _exception = null; process.on('$$restart', function(err) { try { restarted = true; if (!process.emit('restart', process.unloadThread)) { process.__reset = true; if (err) { Error.captureStackTrace(err); console.error('restarting thread ' + process.threadId + ' due to error', err + '\n' + err.stack); } setTimeout(function() { process.unloadThread(); }, 1); } } catch (e) { console.error('process.on -> restart', e); } }); var runner = function(param) { var name = '~NodeJXThread-' + param[0]; var thread; if (cached[name]) { thread = cached[name]; } else { var source = ex_data.readMap(process.threadId, '*' + name); thread = require(name, 0, 0, 3, source); cached[name] = thread; } var w = []; if (typeof param[2] === 'string') w = JSON.parse(param[2]); try { if (!thread.call) { throw "did you 'return' from 'define' method? you should not!"; } var x = thread.call(param[1], w); delete w; delete param[1]; delete param[2]; delete param; return x; } catch (e) { inner.setThreadOnHold(1); clearInterval(inter);// keep thread on hold _exception = e; process.emit('$$restart', e); } }; process.on('uncaughtException', function(err) { if (_exception || err) { inner.setThreadOnHold(1); clearInterval(inter);// keep thread on hold setTimeout(function() { process.emit('$$restart', err); }, 1); } }); function handleCustomMessage(msg) { if (msg.length) { for (var o = 0, ln = msg.length; o < ln; o++) { var m = null; if (msg[o] == 'null') continue; try { m = JSON.parse(msg[o]); } catch (e) { continue; } if (!m) continue; if (m.data && m.data.$runIn === 1) { m = m.data; incWaitCounter(); func([m.id, m.mt]); var ret = runner([m.id, m.cbId, m.param]); if (m.cbId != -1 && ret) { decWaitCounter(); var r = JSON.parse(ret); if (r.dummy) { delete r.dummy; r.o = null; ret = JSON.stringify(r); } r = null; tw.sendToAll(-1, ret, process.threadId); } else { // reduce main to previous state process.release(); } } else { jxcore.tasks.emit('message', m.tid, m.data); } } } } // if mt or mt-keep, the loop interval can be slower var taskPeek = 500; var _timeout = setInterval; if (MTnoKeep) { _timeout = setTimeout; } inter = _timeout(function() { // dummy }, taskPeek); function fastLoop(msg) { if (msg) { handleCustomMessage(msg); } if (!process.__reset) { taskChecker(); } } process.on('threadMessage', fastLoop); taskChecker = function() { var q = inner.compiler(process.threadId, func, runner); if (q == -1 || process.__reset) { if (q == -1) { process.__reset = true; } clearInterval(inter); } return q; }; taskChecker.toString = function() { return null; }; inner.setThreadOnHold(0); if (MTnoKeep) { process.keepAlive(); process.on('exit', function() { process.__reset = true; process.release(); }); } // Copyright & License details are available under JXCORE_LICENSE file var argvParsed = null; var separators = ['=', ':']; var prefixes = ['--', '-']; // maintain this order if (process.platform === 'win32') prefixes.push('/'); var path = require('path'); var fs = require('fs'); var jxSpecials = { 'install' : { 'expectMainModule' : false }, 'npm' : { 'expectMainModule' : false }, 'monitor' : { 'expectMainModule' : false }, 'package' : { 'expectMainModule' : true }, 'compile' : { 'expectMainModule' : true }, 'mt' : { 'expectMainModule' : true }, 'mt-keep' : { 'expectMainModule' : true } }; // encapsulation of single argument var singleArg = function(arg, _index) { var _this = this; this.index = _index; this.org = arg; this.name; this.value; // indicates if value was given for an arg, e.g. --arg=2 or -d 1 etc. this.hasValue; // one of [ "--", "-", "/"], e.g. --arg=2 or -d or /T this.prefix; // one of [ "=", ":", " "], e.g. --arg=2 or --arg:2 or -arg 2 this.valueSep; this.isInt; this.asInt; this.isBool; this.asBool; this.setValue = function(_value) { _this.value = _value; var _int = parseInt(_value); if (!isNaN(_int)) { _this.isInt = true; _this.asInt = _int; } var b = exports.isBoolValue(_value); if (b.isFalse || b.isTrue) { _this.isBool = true; _this.asBool = b.isFalse ? false : true; } _this.hasValue = typeof _this.value !== 'undefined'; }; // splits value by a given separator (or exports.sep) this.splitBySep = function(sep) { sep = sep || exports.sep; var arr = _this.value === undefined ? [] : _this.value.toString() .split(sep); var ret = []; // copying non-empty parts for (var a = 0, len = arr.length; a < len; a++) { if (arr[a].trim()) ret.push(arr[a]); } return ret.length ? ret : null; }; // checking if value is available after a separator within this argv, // e.g. --arg=1 or --arg:2 var splitValue = function(_value) { for (var a = 0, len = separators.length; a < len; a++) { var separator = separators[a]; var sepId = _value.indexOf(separator); if (sepId === -1) { _this.name = _value; } else { _this.name = _value.slice(0, sepId); _this.valueSep = separator; _this.setValue(_value.slice(sepId + 1)); break; } } }; var found = false; for (var p = 0, len = prefixes.length; p < len; p++) { var prefix = prefixes[p]; // checking if the arg is prefixed, e.g. --arg or -arg if (arg.indexOf(prefix) === 0 && arg.indexOf(' ') === -1) { found = true; this.prefix = prefix; arg = arg.slice(prefix.length); splitValue(arg); break; } } if (!found) this.name = arg; }; // parses array of args (e.g. process.argv) var argvParser = function(arr, options) { var result = {}; var index = -1; if (!options) options = {}; var checkNextValue = function() { if (!arr.length) return; var v = new singleArg(arr[0]); if (v.prefix) { // the next param is not a value, it is just another arg v = null; return; } else { arr.shift(); index++; return v.org; } }; var addNoInternals = function(obj) { if (!(obj instanceof singleArg)) return; if (options.internals) { if (options.internals.indexOf(obj.name) !== -1 || options.internals.indexOf((obj.prefix || '') + obj.name) !== -1) return; } noInternals.push(obj.org); if (obj.hasValue && obj.valueSep === ' ') noInternals.push(obj.value); }; var set = function(name, arg) { if (!result[name] || options.overwrite) result[name] = arg; addNoInternals(arg); }; var setExtra = function(name, obj) { if (!result['_']) result['_'] = {}; result['_'][name] = obj; addNoInternals(obj); }; // copy var arr = arr.slice(0); var noPrefix = []; var noInternals = []; var expectMainFileName = true; var arg; while (arg = arr.shift()) { index++; if (index === 0) { noInternals.push(arg); continue; } if (index === 1) { // mt / mt-keep special treatments if (arg.slice(0, 2) === 'mt') { arg = '--' + arg; if (arg.indexOf(':') === -1) arg += ':2'; } else { } } var _arg = new singleArg(arg, index); // checking for special jx command and eventually mainModule file name in // argv if (expectMainFileName && !_arg.prefix) { if (jxSpecials[_arg.name]) { setExtra(_arg.name, true); expectMainFileName = jxSpecials[_arg.name].expectMainModule; } else { expectMainFileName = false; setExtra('mainModule', arg); } noInternals.push(arg); continue; } if (_arg.prefix) { if (options.splitSingleDashed && _arg.prefix === '-' && _arg.name.length > 1) { // multiple params after single dash, like: -abc var splitted = _arg.name.split(''); for (var o = 0, len = splitted.length; o < len; o++) { set(splitted[o], new singleArg(splitted[o], index)); } continue; } // regular params with values: -a 5 --name=value --name value if (!_arg.hasValue) { var val = checkNextValue(); if (val !== undefined) { _arg.setValue(val); _arg.valueSep = ' '; // space } } set(_arg.name, _arg); } else { // params without leading dashes (- or --) are treated like values _arg.setValue(_arg.name); _arg.hasValue = false; noPrefix.push(_arg.name); set(_arg.name, _arg); } } if (noPrefix.length) setExtra('withoutPrefix', noPrefix); setExtra('withoutInternals', noInternals); return result; }; // argv and options are optional exports.parse = function(argv, options) { if (Object.prototype.toString.call(argv) === '[object Array]') { // argv is given return argvParser(argv, options); } else { // argv is not given, so we'll parse process.argv if (argv && Object.prototype.toString.call(argv) === '[object Object]') { // argv is options options = argv || {}; } if (!options) options = {}; if (argvParsed && !options.force) return argvParsed; argvParsed = argvParser(process.argv, options); return argvParsed; } }; var getSep = function() { if (!process.env.JX_ARG_SEP) return ','; // default is comma var sep = process.env.JX_ARG_SEP; if (process.platform === 'win32') { // windows needs stripping quotes if used, e.g.: set JX_ARG_SEP="@" var first = sep.trim().slice(0, 1); var last = sep.trim().slice(-1); if ((first === '"' && last === '"') || (first === "'" && last === "'")) { sep = sep.trim(); // trimming before first quote and after last one sep = sep.slice(1, sep.length - 1); } else { // if quotes are not used, unix would trim, so let's trim on windows too, // e.g.: // set JX_ARG_SEP=@ && echo ok // (there are spaces after @) sep = sep.trim(); } } return sep; }; exports.sep = getSep(); // removes an arg and it's value if exists (alters process.argv!) // returns true if arg was found and removed // `arg` is expected to be entire name (including prefixes and value after : or // =) exports.remove = function(arg, expectValue) { var cnt = 1; var id = process.argv.indexOf(arg); if (id === -1) return false; if (expectValue && process.argv[id + 1]) { // if the next arg is a value for this arg (is not prefixed), // remove it too, e.g. --arg value var _arg = new singleArg(process.argv[id + 1]); if (!_arg.prefix) cnt++; } process.argv.splice(id, cnt); return true; }; exports.getValue = function(arg, defaultValue) { if (!argvParsed) exports.parse(); if (argvParsed[arg]) { if (argvParsed[arg].value === undefined) return defaultValue; return argvParsed[arg].value; } else return defaultValue; }; exports.getBoolValue = function(arg, defaultValue) { if (!argvParsed) exports.parse(); if (argvParsed[arg]) // even if !isBool, returns true, because the arg exists return argvParsed[arg].isBool ? argvParsed[arg].asBool : true; else return !!defaultValue; }; exports.isBoolValue = function(arg) { if (typeof arg === 'undefined' || arg === null || !arg.toString()) return { isFalse: false, isTrue: false }; var lc = arg.toString().toLowerCase(); return { isFalse: (lc === 'no' || lc == 'false' || lc == '0'), isTrue: (lc === 'yes' || lc == 'true' || lc == '1') }; }; $GCC: (GNU) 4.9.x 20150123 (prerelease)zR| <AA AAO0j AA AAG 0\`AB ECD AAA A <SAA AAOPR AA AAG <AA AAOPG AA AAB <AA AAOP AA AAB <P?AA AAO` AA AAH <AA AAO` AA AAG T+AA AAOP AA AAH  FA AAC T(-AA AAOp AA AAD  AA AAI T8 AA AAOp AA AAH  AA AAE ,AB C AAA A $FAB B~AA 0.symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10MainSourceEPNS_7commonsEPN6jxcore8JXStringE.rel.text._ZN4node10MainSourceEPNS_7commonsEPN6jxcore8JXStringE.rodata.str1.1.text.unlikely._ZN4node16DefineJavaScriptEN2v86HandleINS0_6ObjectEEE.rel.text._ZN4node16DefineJavaScriptEN2v86HandleINS0_6ObjectEEE.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_.rodata.str1.4.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i.text.unlikely._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i.rel.text._ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE.text.unlikely._ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT_.rel.text._ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT_.text.unlikely._ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ_.rel.text._ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ_.text.unlikely._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T_.rel.text._ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T_.text.unlikely._ZN4node18JXDefineJavaScriptEv.rel.text._ZN4node18JXDefineJavaScriptEv.text.unlikely._GLOBAL__sub_I_node_javascript.cc.rel.text.startup._GLOBAL__sub_I_node_javascript.cc.rel.init_array.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12insert_valueEiRKS8_E19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_iE19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION__.rodata._ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_E19__PRETTY_FUNCTION__.rodata._ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EERKS8_E19__PRETTY_FUNCTION__.rel.data.rel.ro.local._ZN6jxcoreL7nativesE.rodata._ZN6jxcoreL13config_nativeE.rodata._ZN6jxcoreL14sqlite3_nativeE.rodata._ZN6jxcoreL11zlib_nativeE.rodata._ZN6jxcoreL9vm_nativeE.rodata._ZN6jxcoreL11util_nativeE.rodata._ZN6jxcoreL10url_nativeE.rodata._ZN6jxcoreL10tty_nativeE.rodata._ZN6jxcoreL10tls_nativeE.rodata._ZN6jxcoreL13timers_nativeE.rodata._ZN6jxcoreL10sys_nativeE.rodata._ZN6jxcoreL21string_decoder_nativeE.rodata._ZN6jxcoreL26_stream_passthrough_nativeE.rodata._ZN6jxcoreL24_stream_transform_nativeE.rodata._ZN6jxcoreL21_stream_duplex_nativeE.rodata._ZN6jxcoreL23_stream_writable_nativeE.rodata._ZN6jxcoreL23_stream_readable_nativeE.rodata._ZN6jxcoreL13stream_nativeE.rodata._ZN6jxcoreL11repl_nativeE.rodata._ZN6jxcoreL15readline_nativeE.rodata._ZN6jxcoreL18querystring_nativeE.rodata._ZN6jxcoreL15punycode_nativeE.rodata._ZN6jxcoreL11path_nativeE.rodata._ZN6jxcoreL9os_nativeE.rodata._ZN6jxcoreL10net_nativeE.rodata._ZN6jxcoreL13module_nativeE.rodata._ZN6jxcoreL12https_nativeE.rodata._ZN6jxcoreL11http_nativeE.rodata._ZN6jxcoreL9fs_nativeE.rodata._ZN6jxcoreL15freelist_nativeE.rodata._ZN6jxcoreL13events_nativeE.rodata._ZN6jxcoreL13domain_nativeE.rodata._ZN6jxcoreL10dns_nativeE.rodata._ZN6jxcoreL12dgram_nativeE.rodata._ZN6jxcoreL14cluster_nativeE.rodata._ZN6jxcoreL13crypto_nativeE.rodata._ZN6jxcoreL16constants_nativeE.rodata._ZN6jxcoreL14console_nativeE.rodata._ZN6jxcoreL20child_process_nativeE.rodata._ZN6jxcoreL13buffer_nativeE.rodata._ZN6jxcoreL13assert_nativeE.rodata._ZN6jxcoreL16_linklist_nativeE.rodata._ZN6jxcoreL16_debugger_nativeE.rodata._ZN6jxcoreL11node_nativeE.rodata._ZN6jxcoreL17_jx_marker_nativeE.rodata._ZN6jxcoreL17_jx_source_nativeE.rodata._ZN6jxcoreL17_jx_timers_nativeE.rodata._ZN6jxcoreL18_jx_parsers_nativeE.rodata._ZN6jxcoreL18_jx_package_nativeE.rodata._ZN6jxcoreL19_jx_incoming_nativeE.rodata._ZN6jxcoreL17_jx_config_nativeE.rodata._ZN6jxcoreL22_jx_http_helper_nativeE.rodata._ZN6jxcoreL23_jx_loadEmbedded_nativeE.rodata._ZN6jxcoreL24_jx_monitorHelper_nativeE.rodata._ZN6jxcoreL18_jx_monitor_nativeE.rodata._ZN6jxcoreL21_jx_multiplier_nativeE.rodata._ZN6jxcoreL18_jx_install_nativeE.rodata._ZN6jxcoreL16_jx_utils_nativeE.rodata._ZN6jxcoreL16_jx_tasks_nativeE.rodata._ZN6jxcoreL19_jx_memStore_nativeE.rodata._ZN6jxcoreL15_jx_subs_nativeE.rodata._ZN6jxcoreL15_jx_argv_nativeE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    h.<C:)8r)76|5!";d9$%'(*+;-.01F1{356789:;<n"z'%y5?$xW0wv~.v!uIt@sr"4qHpmIonBmlkj19iQgp=f+eSdmcbxa&eJ`B3>__'^zL]\E[7ZY IX " W5 VQ >Uj T 5S <R Q 5rP RlO N. 9cMT ,Lz K 1J @I H G+ 7FG E` Dy \RC >B A -@ E? >>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~   % $* $0 u6 h< PA F 6K Q DW ] c hi o u {       ,  ' 6}  |  @ ] `    `xS">H""^?"""+"%T[-"(8 "+.#6PWgy node_javascript.cc_ZN6jxcoreL11node_nativeE_ZN6jxcoreL7nativesE_ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB_E19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_iE19__PRETTY_FUNCTION___ZZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE12insert_valueEiRKS8_E19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEE19__PRETTY_FUNCTION___ZZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE15internal_insertENS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EERKS8_E19__PRETTY_FUNCTION___GLOBAL__sub_I_node_javascript.cc_ZStL8__ioinit_ZN6jxcoreL15_jx_argv_nativeE_ZN6jxcoreL15_jx_subs_nativeE_ZN6jxcoreL19_jx_memStore_nativeE_ZN6jxcoreL16_jx_tasks_nativeE_ZN6jxcoreL16_jx_utils_nativeE_ZN6jxcoreL18_jx_install_nativeE_ZN6jxcoreL21_jx_multiplier_nativeE_ZN6jxcoreL18_jx_monitor_nativeE_ZN6jxcoreL24_jx_monitorHelper_nativeE_ZN6jxcoreL23_jx_loadEmbedded_nativeE_ZN6jxcoreL22_jx_http_helper_nativeE_ZN6jxcoreL17_jx_config_nativeE_ZN6jxcoreL19_jx_incoming_nativeE_ZN6jxcoreL18_jx_package_nativeE_ZN6jxcoreL18_jx_parsers_nativeE_ZN6jxcoreL17_jx_timers_nativeE_ZN6jxcoreL17_jx_source_nativeE_ZN6jxcoreL17_jx_marker_nativeE_ZN6jxcoreL16_debugger_nativeE_ZN6jxcoreL16_linklist_nativeE_ZN6jxcoreL13assert_nativeE_ZN6jxcoreL13buffer_nativeE_ZN6jxcoreL20child_process_nativeE_ZN6jxcoreL14console_nativeE_ZN6jxcoreL16constants_nativeE_ZN6jxcoreL13crypto_nativeE_ZN6jxcoreL14cluster_nativeE_ZN6jxcoreL12dgram_nativeE_ZN6jxcoreL10dns_nativeE_ZN6jxcoreL13domain_nativeE_ZN6jxcoreL13events_nativeE_ZN6jxcoreL15freelist_nativeE_ZN6jxcoreL9fs_nativeE_ZN6jxcoreL11http_nativeE_ZN6jxcoreL12https_nativeE_ZN6jxcoreL13module_nativeE_ZN6jxcoreL10net_nativeE_ZN6jxcoreL9os_nativeE_ZN6jxcoreL11path_nativeE_ZN6jxcoreL15punycode_nativeE_ZN6jxcoreL18querystring_nativeE_ZN6jxcoreL15readline_nativeE_ZN6jxcoreL11repl_nativeE_ZN6jxcoreL13stream_nativeE_ZN6jxcoreL23_stream_readable_nativeE_ZN6jxcoreL23_stream_writable_nativeE_ZN6jxcoreL21_stream_duplex_nativeE_ZN6jxcoreL24_stream_transform_nativeE_ZN6jxcoreL26_stream_passthrough_nativeE_ZN6jxcoreL21string_decoder_nativeE_ZN6jxcoreL10sys_nativeE_ZN6jxcoreL13timers_nativeE_ZN6jxcoreL10tls_nativeE_ZN6jxcoreL10tty_nativeE_ZN6jxcoreL10url_nativeE_ZN6jxcoreL11util_nativeE_ZN6jxcoreL9vm_nativeE_ZN6jxcoreL11zlib_nativeE_ZN6jxcoreL14sqlite3_nativeE_ZN6jxcoreL13config_nativeE.LC1.LC2.LC4.LC5.LC12.LC11.LC10.LC9.LC8.LC7.LC16.LC15.LC17.LC14.LC22.LC21.LC20.LC19.LC26.LC24.LC27.LC25.LC31.LC33.LC37.LC34.LC35.LC36_ZN4node10MainSourceEPNS_7commonsEPN6jxcore8JXStringE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN6jxcore8JXString10SetFromSTDEPKciPv_ZN2v87Isolate10GetCurrentEv_ZN4node16DefineJavaScriptEN2v86HandleINS0_6ObjectEEE_ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v811HandleScopeD1Ev_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE4swapEPSB__ZNSs4_Rep20_S_empty_rep_storageE_ZNSs4swapERSs_ZNSs4_Rep10_M_destroyERKSaIcE__assert2_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_right_to_leftEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE23rebalance_left_to_rightEPSB_i_ZN5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE5splitEPSB_i_ZNSsC1ERKSs_ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE18rebalance_or_splitEPNS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EE_Znwj_ZNK5btree10btree_nodeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE24binary_search_compare_toINS_28btree_key_compare_to_adapterIS5_EEEEiRS7_iiRKT_memcmp_ZNK5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE20internal_find_uniqueINS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEEET_RS7_SJ__ZN5btree5btreeINS_16btree_map_paramsISsN4node13MAP_HOST_DATAESt4lessISsESaISt4pairIKSsS3_EELi256EEEE13insert_uniqueIPKS8_EES6_INS_14btree_iteratorINS_10btree_nodeISA_EERS8_PS8_EEbERS7_T__ZdlPv_ZN4node18JXDefineJavaScriptEv_ZN6XSpace9LOCKSTOREEv_ZN6XSpace5StoreEv_ZNSsC1EPKcRKSaIcE_ZN6XSpace11UNLOCKSTOREEvmalloc_ZNSs7reserveEj_ZNSs6appendEPKcj_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitpthread_create # u  !)1H N T 2 GT 6[0' 5 0? O b"[cp ~ .   .   .   . "( 6 .@ PV d .n ~ bZM ( -2 BH V -` pv  -   -   -  pP"P_  ,   +   ,  ! ,+ ;   /  _  / % ( /2 BP Z /d lz  /  $ D$ B%-WZi  1  " +, 4  9 PU -D$* 20 9 [ +=O  ";j y(:c"KZj ALt  ( 2:' $(04<@HLTX`dlpx|  $,08<DHPT\`hltx ~(,}48|@D{LPzX\ydhxptw|vutsrqpo `  T, "% '44 @ L X d p |  !',uq @ (23W ` @ pES  @T xJ2T \Y    @̫ B&` " @ܬ ^B`? > @ ~ @Ԯ "7: @ +  @ԯ 0%l" "- @ P(Y '( '8 $ @T + 0 1  @< `.A 9v 9Fr @ 81 8: @Գ 3 @:|@V ;@ =)@@>)@A?d@C@@D@w@H@s @ܳ <@K@SE@o-@ @)@>@K\R@l2 @@=@@7@@@@@7@@P@91@Q@@V,@9c@ @+Rl@M@\5r@s@@<@5@Q@V>@$@H" @k@I@@y7@{E@@@L@;'@^3>@*eJ@@ux@u@m@S@BG +@fs =@w @ @ 9  @& @N @w B@@q @ I@ @ 4@M @| @@v I@@z !@@ ~.@! 0@H ?$@r '%@E n"@ng ng 0rg (g  g @ @ hj    jx_result.o/ 1560953080 501 20 100644 48048 ` ELF4( yzT$1tJ tz Í&T$1tJ tz Í&T$1tJ tzÍ&T$1tJ tzÍ&T$1tJ tzÍ&D$tx1T$1tJ tzÍ&D$tx1D$tx1D$t@Ív1D$tx1USd$D$ $d$[]!inside_scope_ && "JXEngine was already in a scope"../src/public/../jx/../jxcore.hinside_scope_ && "JXEngine was already outside of a scope"com_ != NULL && "JXFunctionWrapper was already disposed."../src/public/../jx/../jxcore_type_wrap.hUWVSd$D$pIHQ:0l$hHL$5FX$8L$8 $L$(D$D$ D$ $D$@$D$,?$G $D$$D$1t $$D$D$$$?$D$,$D$ $D$($D$d$\[^_]ÍvD$1t $$d$\[^_]Ðd$\1[^_]Ðt&D$7D$ D$$D$=D$ D$$UWVSd$D$pIHQ:0l$hHL$5FX$8L$8 $L$(D$D$ D$ $D$@$D$,?$G $D$$D$1t $$D$$\$$?$D$,$D$ $D$($D$d$\[^_]ÍvD$1t $$d$\[^_]Ðd$\[^_]Ðt&D$7D$ D$$D$=D$ D$$UWVSd$D$pIHQ:0l$hHL$5FX$8L$8 $L$(D$D$ D$ $D$@$D$,?$G $D$$D$1t $$D$D$$$?$D$,$D$ $D$($D$d$\[^_]fD$1t $$d$\[^_]Ðd$\1[^_]Ðt&D$7D$ D$$D$=D$ D$$messagename: UWVSd$UB2oEFXU$UDžBP?GEMċ $UD$MEE$E؉$EE?UUE $G $EUEJt U$UD$EUD$$ED$Ủ$D$UU$U$UE$E$?8$E$E$E$Ee[^_]Ít&Jttku4$}؉D$E4$D$ED$<$D$<$$<$e[^_]Í&}<$UD$UE4$ D$T$E$EUVe[^_]Ít&M $UD$MUE4$ D$T$E$EEx}D$ D$ED$E$EED$E$@E$ED$ED$E$UD$EMD$ T$$MEMD$EL$$ED$D$Ẻ$EE$UMT$D$ $ME$MD$D$ $MED$L$$E$$EUMD$T$ $E$U$UUEBE;BED$E$UUEt&1Rz}D$ D$E<$D$uEt$$U_$t$u<$t$D$EU<$D$ D$UEt$ủ<$D$ED$D$E؉$<$D$Mĉ4$L$<$4$D$D$U<$D$T$<$}$D$4$|$E$ủ4$V;t,NEE$D$ENy~ӋBHJD$7D$ D$$D$=D$ D$$D$tHQv@ Ð1UWVSd$uFAXM$NjFEM?UЉ$MD$UEE$E؉$EM?\M$W $UE~UM$MM?$E$E$E$Ee[^_]Ðt&~t 1e[^_]ËEuċ4$D$Eă4$D$Eă$fEuĉUM4$D$Eă4$D$Eă$UMEMMaD$=D$ D$$D$7D$ D$$UWVSd$t$p~>l$hGX$VNi,8l$hD$L$8 $L$D$D$D$$D$@$D$ D$8ZD$ $D$P D$$$T$D$$~ Nt6)t,$l$hL$(D$$L$(D$$ $l$hD$$D$$D$$l$hD$$D$$8$D$ $D$$D$$,t& tcl$ht$T$T$$F~F FtFl$h4$d$\[^_]Í&l$htB$D$|$T$|$$T$Bt |$$D$$|$T$T$EBt |$$D$$|$T$T$B |$$D$$|$T$T$e=iD$(,$l$hD$D$L$,D$$L$,D$(iD$(D$$,$l$hD$D$L$,L$,D$()it,D$(D$$,$l$hD$D$L$,L$,D$(iuD$(D$$,$l$hD$D$L$,L$,D$(DiT$$@*B|$$6)HD$7D$ D$$D$=D$ D$$UWVSd$E0EFX$NjE@E_Et$EE@@ ?MЉ $MD$EE$E؉$E?$G $EUEĉ$T$U T$Uă1t$ME$?$E$E$E$e[^_]Í&U Eċu$T$t$Uă1t$Me[^_]Í$MEAEVD$7D$ D$$D$=D$ D$$UWVSd$EE E0FX$NjE@ENEt$EE@@ ?MЉ $MD$EE$E؉$E?$G $EMEĉ$L$Uă1t$UE$?$E$E$E$e[^_]ÐUEĉ$T$Uă1t$Ue[^_]Ð$MEAjD$7D$ D$$D$=D$ D$$UWVSd$E EE8GX$ƋE@EEt$EE@@ >UЉ$UD$EE$E؉$E>a$F $E}Eĉ$Eă$$ME$>$E$E$E$e[^_]f}u:Eĉ$Eăt:$t,$Me[^_]fEĉ$Eău1؍&Eă11.$MEA@D$7D$ D$$D$=D$ D$$UWVSd$E0FX$NjE@EpEt$EE@Eu E $UB ?MЉ $MD$EE$E؉$E?$G $EU EċMt$T$$L$ Uă1t$ME$?$E$E$E$e[^_]ÍvU Eċ}t$T$$|$ Uă1t$ue[^_]f$MEAHD$7D$ D$$D$=D$ D$$UWVSd$E0FX$NjE@EEt$EUE@iE ^E $MA ?MЉ $MD$EE$E؉$E?1$G $EEt$D$E $@Uĉ$D$Uă1t$UE$?$E$E$E$e[^_]ÐEt$D$E $@Uĉ$D$Uă1t$}e[^_]Í&E$MEAZD$7D$ D$$D$=D$ D$$D$@UWVS$duEEE@X$}EGG GG~ u~ tE$1e[^_]Ðt&FEE8EEljD$E$|<$E$xE8/}E$G $EE}G‰$EEPttE4f1ɉUU9:rUE)9ut)t@t@t@ E 1UpEEEC+vtI  1tU$U;}FHwE8H(tEU$MU랐t&E}C‰$EEPttE4_f1ɉUU9:wUE)9ut)t@t@t@ E 1MUpEEB ftI  1tU$U;}FHwE8H(tEU$MU랐t&;I1P[t&EU$MU1)1f9I0ALt&EU$MU1!fEEĉ$EE}1<$E@t $ƋE@$MUt$D$L$M$UL$ u<$Et$$<$E$E$Et$D$E$EEĉ$EE0:}1<$E@t $ƋE@$MUt$D$L$M$UL$ u<$Et$$<$E$E$Et$D$E$ƋE$E8PEE$x$E$|$e[^_]Ðt&EvE|$$uE4$D$<$4$E$t&E|$$uE4$D$<$4$1E$E$&EEt&E$EED$E$UEt$T$D$UET$ $u+E$EED$E$UEt$T$D$UET$ $usD$?D$ D$$D$GD$ D$$D$7D$ D$$D$=D$ D$$D$@UWVSd$D$p8eGX$ƋD$p@D$UD$t$D$D$p@@ D$t@>D$ L$8 $L$$D$D$D$$D$@$D$(D$ >D$,$F $D$ D$,1t$T$D$ $>$D$($D$$D$$$f1t$L$D$p@d$\[^_]Ð$L$pD$AD$7D$ D$$D$=D$ D$$T$BBËT$BBUVSt$t+FF FFF[^]Ív[1^]UWVSd$T@X$NjE0$Et?t,Eĉ$Uă1t$UvMЉ $MD$EE$E؉$E?$G $EEĉ$Uă1t$ME$?$E$E$E$EU@ @@@Pe[^_]Íe1[^_]D$7D$ D$$D$=D$ D$$UWVSd$|@X$NjEE0$Et?t;UED$$T$Uă1t$}vUЉ$UD$EE$E؉$E?$G $EMED$$L$Mă1t $ME$?$E$E$E$EM@ @@@He[^_]Í&e1[^_]D$7D$ D$$D$=D$ D$$UWVSd$Eu8EGX$E@EFvR9IUЉ$MD$UEE$E؉$EM9M$MA M$EMIuĉM$MEEM4$T$E UD$ D$E4$UD$EUD$ D$Eĉ$D$E$M9%$E$E$E$e[^_]Ív8^uĉ$EE4$T$E 4$D$ D$E}ĉD$E<$D$ D$EĉD$e[^_]Å9MEƉD$EЉ$E4$E؉$EM9M$MA M$EMfE8Muĉ4$EăMt\M$Mt&E8tXuĉ4$Eăt$t&u1u1EvEuă(뮐t&Euă(eD$7D$ D$$D$=D$ D$$UWVSd$Eu8 EGX$E@EFvJ9AUЉ$MD$UEE$E؉$EM9M$MA M$EM9uĉM$MEEM4$T$EUĉ4$D$E UD$EUD$ D$Eĉ$D$E$M9$E$E$E$e[^_]Ív0Vuĉ$EE4$T$E4$}ĉD$E D$E<$D$ D$EĉD$e[^_]Å9MEƉD$EЉ$E4$E؉$EM9M$MA M$EMfE8Muĉ4$EăMt\M$Mt&E8tXuĉ4$Eăt$t&u1u1EvEuă(뮐t&Euă(eD$7D$ D$$D$=D$ D$$UWVSd$E0EFX$NjE@r?iEMЋ $MD$EE$E؉$EE?E$G $EEĉEE $D$M EUĉL$MD$ $L$UEăUD$$TE$Uă1t $UBB T$D$4$E0@@E$?$E$E$E$e[^_]Í&}ĉ<$D$U MEĉT$D$ <$L$EEăD$E$<$Uă1t $}GG |$4$D$E0@@e[^_]Í&E D$ D$ED$E$EăUD$ET$$EăE D$ <$D$ED$Eă<$D$ED$Eă9E&D$=D$ D$$D$7D$ D$$UWVSd$Eu8GX$EɋP09'UUЉ$D$MEUE$E؉$EMU9PUM$MA M$EUEĉE$T$U ET$Uĉ$T$FF Eĉt$<$D$E>FF$M9$E$E$E$e[^_]Ð Eĉ$EL$E MĉD$EL$$FF Eĉt$<$D$>FFe[^_]fCD$7D$ D$$D$=D$ D$$D$@XUWVSd$uGX$8 EUЋ$UD$EE$E؉$EM94M$MQ M$UEĉ$EEăD$E$FF Eĉt$<$D$U>FF$M9$E$E$E$e[^_]ÍEĉ$EUăET$$FF Eĉt$<$D$>FFe[^_]Í&mD$7D$ D$$D$=D$ D$$UWVSd$t$pGX$-8$D$ T$8$T$$D$D$D$$D$@$D$(L$ 9+$L$ A L$,$D$ /1L$,tEl$hL$,$L$,Fl$hF t$D$<$L$,D$ >FF$L$,9$D$($D$$D$$$d$\[^_]Í&1t $FF t$<$D$>FFd$\[^_]Ðt&nD$7D$ D$$D$=D$ D$$UWVSd$E8FGX$ƋEP>MЉ $UD$MEE$E؉$EU>U$F $EUMċ $T$E MD$D$ $E$>$E$E$E$e[^_]ÍEĉ$T$E D$D$Eĉ$e[^_]fD$7D$ D$$D$=D$ D$$UWVSd$}7FX$E8UЉ$UD$EE$E؉$EE8pE$E@ $EEĉ$L$EăyD$$NjE$E8E$E$E$E$e[^_]ÐEĉ$T$EăJytFD$$e[^_]fA \H1yMxEt&B tP1zuxmXD$=D$ D$$D$7D$ D$$UWVuSd$} 4$ME؉$EM}ĉD$D$ L$<$Uă$UMUET$$EE$E<$D$Eă4$D$M4$Ee[^_]&}tBv'}MĉT$ D$ $|$Eă4$D$U뙐t&E؉$EUWVSd$E8GX$ƋE@EpEt$EEU@EB >MЉ $MD$EE$E؉$E>$F $EMEĉ|$$Q M T$ L$Uă1t$UE$>$E$E$E$e[^_]Í&uEċM |$$ L$t$ Uă1t$}e[^_]Í&$UEBHD$7D$ D$$D$=D$ D$$UWVSd$E8GX$ƋE@EpEt$EEU@ EB >MЉ $MD$EE$E؉$E>$F $EMEĉ|$$Q M T$ L$Uă1t$UE$>$E$E$E$e[^_]Í&uEċM |$$ L$t$ Uă1t$}e[^_]Í&$UEBHD$7D$ D$$D$=D$ D$$UWVuSd$} 4$ME؉$EM}ĉD$D$ L$<$Uă$UMUET$$EE$E<$D$Eă4$D$M4$Ee[^_]&}tBv'}MĉT$ D$ $|$Eă4$D$U뙐t&E؉$EUWVSd$E8GX$ƋE@EpEt$EEU@EB >MЉ $MD$EE$E؉$E>$F $EMEĉ|$$Q M T$ L$Uă1t$UE$>$E$E$E$e[^_]Í&uEċM |$$ L$t$ Uă1t$}e[^_]Í&$UEBHD$7D$ D$$D$=D$ D$$UVSd$4$t$D$$d$[^]v8::Handle jxcore::JXFunctionWrapper::Call(int, v8::Handle*, bool*)v8::Local jxcore::JXFunctionWrapper::GetFunction()void jxcore::JXEngine::LeaveScope()void jxcore::JXEngine::EnterScope()$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0!D!X!l!!! &AB A`A h0AA AAOp% AA AAD b AA AAB D CA AAF hAA AAOp% AA AAD b AA AAB D CA AAF hAA AAOp& AA AAC b AA AAB D CA AAF LtAB C AAA E m AAA H P AAA E <,AB C) AAA F L AAA A <bAA AAOp AA AAH <X)AB CW AAA H v AAA G <AB CU AAA B s AAA B <tAB Cd AAA C z AAA C <.AB Cc AAA D z AAA C <X^AB C} AAA B E AAA H  <mAB Cy AAA F  AAA F  ,AB C} AAA B 0D 0XNAB B} AA D ACA <AB Cc FAA G F AAA A <AB C FAA H F AAA A < AB C AAA D | AAA A <LAB C AAA D t AAA A <YAB C AAA H  AAA H <6AB Ce AAA B b AAA C   < AB CF AAA A U AAA H T`AC AAOpG AA AAH ~ AA AAF <AB C  AAA G r AAA C <AB C- AAA B x CAA C ,8PAB BD AAA J <h.AB CW AAA H } AAA H <.AB CW AAA H } AAA H ,PAB BD AAA J < .AB CW AAA H } AAA H $X FAB B~AA  .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN6jxcore17JXFunctionWrapper17dummyWeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text._ZN6jxcore17JXFunctionWrapper17dummyWeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely.JX_IsFunction.text.JX_IsFunction.text.unlikely.JX_IsError.text.JX_IsError.text.unlikely.JX_IsInt32.text.JX_IsInt32.text.unlikely.JX_IsDouble.text.JX_IsDouble.text.unlikely.JX_IsBoolean.text.JX_IsBoolean.text.unlikely.JX_IsString.text.JX_IsString.text.unlikely.JX_IsBuffer.text.JX_IsBuffer.text.unlikely.JX_IsUndefined.text.JX_IsUndefined.text.unlikely.JX_IsNull.text.JX_IsNull.text.unlikely.JX_IsNullOrUndefined.text.JX_IsNullOrUndefined.text.unlikely.JX_IsObject.text.JX_IsObject.text.unlikely.JX_IsJSON.rel.text.JX_IsJSON.rodata.str1.4.text.unlikely.JX_GetInt32.rel.text.JX_GetInt32.text.unlikely.JX_GetDouble.rel.text.JX_GetDouble.text.unlikely.JX_GetBoolean.rel.text.JX_GetBoolean.rodata.str1.1.text.unlikely.JX_GetString.rel.text.JX_GetString.text.unlikely.JX_GetDataLength.text.JX_GetDataLength.text.unlikely.JX_GetBuffer.rel.text.JX_GetBuffer.text.unlikely.JX_Free.rel.text.JX_Free.text.unlikely.JX_SetInt32.rel.text.JX_SetInt32.text.unlikely.JX_SetDouble.rel.text.JX_SetDouble.text.unlikely.JX_SetBoolean.rel.text.JX_SetBoolean.text.unlikely.JX_SetJSON.rel.text.JX_SetJSON.text.unlikely.JX_SetBuffer.rel.text.JX_SetBuffer.text.unlikely.JX_SetUndefined.text.JX_SetUndefined.text.unlikely.JX_CallFunction.rel.text.JX_CallFunction.text.unlikely.JX_SetNull.text.JX_SetNull.text.unlikely.JX_SetObject.rel.text.JX_SetObject.text.unlikely.JX_MakePersistent.text.JX_MakePersistent.text.unlikely.JX_ClearPersistent.text.JX_ClearPersistent.text.unlikely.JX_New.rel.text.JX_New.text.unlikely.JX_CreateEmptyObject.rel.text.JX_CreateEmptyObject.text.unlikely.JX_CreateArrayObject.rel.text.JX_CreateArrayObject.text.unlikely.JX_SetNamedProperty.rel.text.JX_SetNamedProperty.text.unlikely.JX_SetIndexedProperty.rel.text.JX_SetIndexedProperty.text.unlikely.JX_GetNamedProperty.rel.text.JX_GetNamedProperty.text.unlikely.JX_GetIndexedProperty.rel.text.JX_GetIndexedProperty.text.unlikely.JX_GetThreadIdByValue.text.JX_GetThreadIdByValue.text.unlikely.JX_GetGlobalObject.rel.text.JX_GetGlobalObject.text.unlikely.JX_GetProcessObject.rel.text.JX_GetProcessObject.text.unlikely.JX_WrapObject.rel.text.JX_WrapObject.text.unlikely.JX_UnwrapObject.rel.text.JX_UnwrapObject.text.unlikely._Z9NewStringIcEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_Pj.rel.text._Z9NewStringIcEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_Pj.text.unlikely.JX_SetString.rel.text.JX_SetString.text.unlikely.JX_SetError.rel.text.JX_SetError.text.unlikely._Z9NewStringItEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_Pj.rel.text._Z9NewStringItEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_Pj.text.unlikely.JX_SetUCString.rel.text.JX_SetUCString.text.unlikely._GLOBAL__sub_I_jx_result.cc.rel.text.startup._GLOBAL__sub_I_jx_result.cc.rel.init_array.rodata._ZZN6jxcore17JXFunctionWrapper4CallEiPN2v86HandleINS1_5ValueEEEPbE19__PRETTY_FUNCTION__.rodata._ZZN6jxcore17JXFunctionWrapper11GetFunctionEvE19__PRETTY_FUNCTION__.rodata._ZZN6jxcore8JXEngine10LeaveScopeEvE19__PRETTY_FUNCTION__.rodata._ZZN6jxcore8JXEngine10EnterScopeEvE19__PRETTY_FUNCTION__.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group      !#$%$G$'(*+-./1234679:<=?@BCEFHIJKAZMNOPRSTUVWYZ\]_`bcefhiklmnpqstvwyz|}F8G#M4#ST#Y-_-e -k#q#w" ! ! !!!!-7LX&!bx%+c( &+4R/_x@Gk +2<,4Ib7):<qw=t@.C^F* I:mKJP^q + 2     N P S U NW" B ZW k ]  `  c Yf" 6i8 L lb nu q t  w  P"zD \ .}i .u P"  .   $ 1 jx_result.cc_ZZN6jxcore8JXEngine10EnterScopeEvE19__PRETTY_FUNCTION___ZZN6jxcore8JXEngine10LeaveScopeEvE19__PRETTY_FUNCTION___ZZN6jxcore17JXFunctionWrapper11GetFunctionEvE19__PRETTY_FUNCTION___ZZN6jxcore17JXFunctionWrapper4CallEiPN2v86HandleINS1_5ValueEEEPbE19__PRETTY_FUNCTION___GLOBAL__sub_I_jx_result.cc_ZStL8__ioinit.LC13.LC14.LC15.LC20.LC21.LC22.LC33.LC34_ZN6jxcore17JXFunctionWrapper17dummyWeakCallbackEN2v810PersistentINS1_5ValueEEEPvJX_IsFunctionJX_IsErrorJX_IsInt32JX_IsDoubleJX_IsBooleanJX_IsStringJX_IsBufferJX_IsUndefinedJX_IsNullJX_IsNullOrUndefinedJX_IsObjectJX_IsJSON__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_JX_GetInt32_ZN6jxcore8JXEngine21GetInstanceByThreadIdEi_ZN2v86LockerC1EPNS_7IsolateE_ZN2v87Isolate5EnterEv_ZN2v811HandleScopeC1Ev_ZN2v87Context5EnterEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZNK2v85Value10Int32ValueEv_ZN2v87Context4ExitEv_ZN2v87Isolate4ExitEv_ZN2v811HandleScopeD1Ev_ZN2v86LockerD1Ev_ZN2v87Isolate10GetCurrentEv__assert2JX_GetDouble_ZNK2v85Value11NumberValueEvJX_GetBoolean_ZNK2v85Value12BooleanValueEvJX_GetString_ZNK2v85Value8ToObjectEv_ZNK2v85Value8ToStringEv_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEvstrdup_ZN6jxcore8JXStringD1Ev_ZN6jxcore12JX_StringifyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPjstrlen_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3HasENS_6HandleINS_6StringEEEfree_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZNSsC1EPKcRKSaIcE_ZNSs6appendEPKcj_ZNSs4_Rep20_S_empty_rep_storageE_ZNSs4_Rep10_M_destroyERKSaIcEJX_GetDataLengthJX_GetBuffer_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEvJX_Free_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZdlPv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_EJX_SetInt32_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZnwjJX_SetDouble_ZN2v86Number3NewEdJX_SetBoolean_ZN2v84TrueEv_ZN2v85FalseEvJX_SetJSON_ZN6jxcore8JX_ParseEPN4node7commonsEPKcjJX_SetBuffer_ZN4node6Buffer3NewEPKcjPNS_7commonsEJX_SetUndefinedJX_CallFunction_Znaj_ZN2v84NullEv_ZN2v89UndefinedEv_ZN2v88TryCatchC1Ev_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZNK2v88TryCatch9HasCaughtEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v88TryCatchD1Ev_ZdaPv_ZN6jxcore8JXEngine16ConvertToJXValueEPN4node7commonsEN2v86HandleINS4_5ValueEEEP8_JXValue_ZNK2v88TryCatch9ExceptionEv_ZN2v87Context10GetCurrentEv_ZN2v87Context6GlobalEvJX_SetNullJX_SetObjectJX_MakePersistentJX_ClearPersistentJX_New_ZN4node7commons11getInstanceEvJX_CreateEmptyObject_ZN2v86Object3NewEvJX_CreateArrayObject_ZN2v85Array3NewEPNS_7IsolateEiJX_SetNamedProperty_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeEJX_SetIndexedPropertyJX_GetNamedPropertyJX_GetIndexedProperty_ZN2v86Object3GetEjJX_GetThreadIdByValueJX_GetGlobalObjectJX_GetProcessObjectJX_WrapObject_ZN2v86Object25SetPointerInInternalFieldEiPvJX_UnwrapObject_ZN2v86Object31SlowGetPointerFromInternalFieldEi_Z9NewStringIcEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_Pj_ZNK2v86String6LengthEvJX_SetStringJX_SetError_Z9NewStringItEN2v86HandleINS0_5ValueEEEPN4node7commonsEPKT_Pj_ZN2v86String3NewEPNS_7IsolateEPKtiJX_SetUCString_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitpthread_create  J{ ,RZy x s y z r y J{ ,RZy x s y z r y J{ ,RZy x s y z r y L3AIWb| 8Wb {";D |h }  6AOam {*3 |Tm }$0X x s y z r y C}$Xjx z r y  x s  y( 6 #;Yeq} )PH x" s, y4B zL rV y^ 2V 4?JU} x s y  z r y% 3W2=HSr x s y z r  y /S'ALWb}* x4 s> yFT z^ rh yp )Mr&@KVa x s y z r" y* )M 0@Zep{ x s( y0> zH rR yZ ;u (4a(l'AUo)=W{-A[px$K[o ~ q  ~ p  # x- s7 y?M zW ra yi *Q4@LXl x s y z r y   +>[o!,7B x s y z r y +Gs .HS^i x s y z r y 5 4Xc$]esAx x s y z r y 5 ,P[xMUc1h xr s| y z r y 2it1Rj'H z r# y+9 xC sM yU ,fq%BMXc x s y z  r* y2 .]hv#.9DZo x s y z r y  /bn~0<HTv x s y z r y  )`ky=Zi| x s y z r y )[ft)Ef z r y x s y  Hl}(BG )M 4?JU x s y z r" y* )M 4?JU x s y z r" y*  Hl}(BG )M 4?JU x s y z r" y*  t( 2:l 4H \ p4!% 'x*,.0\2468\:<>BD4FHH\JLNPPRTVX$Zd\^`<bldfh j\ l un 4 n @ n L n X`!`'`,``ap!0!A[!l!!0!Q`s!"@Un~ #0& @H!2X&NEPA @`%W&w0s @0( @+2  @Ї/!8X,T @4k,0b @`87) @: @x=t @X@-dKp.G @XC\|^x @@F!"  ""m @8K}** (*H*D @P[,|,,, ,,N @W-- @Z9.a.] @x]|00 @P8`44 @8cr8)8Y% @0fC;l;6h @i> > *>0> @Кn >@/ @@+ @qI NBj PBf @t~ D  D @`w >F @FP @0zN Gn G.j @} I I. @ K KP @pI @Mk @M.g @ nO pOF @С8 O @ OZ@I @PA@ P$ P$  Q+ QG 0Q(P 0Qd 0Q ` @Zu 8h x@ jx.o/ 1560953079 501 20 100644 25972 ` ELFT4(olHINOfgThere is no extension method for given Idcom_ != NULL && "JXFunctionWrapper was already disposed."../src/public/../jx/../jxcore_type_wrap.hThis method expects the first parameter is unsigned(JX_DefineExtension) Did you initialize the JXEngine instance for this thread? !inside_scope_ && "JXEngine was already in a scope"../src/public/../jx/../jxcore.hinside_scope_ && "JXEngine was already outside of a scope"(JX_InitializeNewEngine) Did you forget destroying the existing JXEngine instance for this thread? (JX_Evaluate) Did you start the JXEngine instance for this thread? (JX_DefineMainFile) Did you initialize the JXEngine instance for this thread? (JX_DefineFile) Did you initialize the JXEngine instance for this thread? (JX_StartEngine) Did you initialize the JXEngine instance for this thread? (JX_LoopOnce) Did you initialize the JXEngine instance for this thread? (ret_val: %d) (JX_Loop) Did you initialize the JXEngine instance for this thread? (JX_StopEngine) Did you initialize the JXEngine instance for this thread? JXcore engine event loop was still handling other events UWEVSd$$} E4$$EywEG$GJG$E=IM5UFE$UuUE&E1ҍEĉ} ׉EIfE ً@UFF FFt$D$$;}xE ;x|E$Eă릐učD$ D$E4$D$Eă4$D$Eă4$D$EăD$E$ME$Ee[^_]E$'Eĉ$Uă1t$듐t&E1MtMFF MFFL$$MEu}v<$;uuuFV  thF1t $lj4$|$&Eĉ$EăfučD$ sfFi@1u렍Eĉ$Eă=f4$}D$Uԉ|$$EE$4$uED$ 4$D$ED$Eă4$D$Eă4$D$EăD$E$MEԍP;H|$$fEMtMFF MFFL$$=4$E8P(Eĉ$HqpwD$?D$ D$$11jxcore-logInitializing JXcore engine JXcore engine is ready JX_Evaluatemain.jsStarting JXcore engine JXcore engine is started Destroying JXcore engine JXcore engine is destroyed UWVSd$$F${H8D$,D$,T$H$L$8D$T$0D$,$D$P$D$4L$8?sL$<$G $D$8t$ D$D$$<$D$D$8$L$&'t$ D$D$$<$D$렐t&L$0L$0D$,f$D$D$$^D$=D$ D$$D$7D$ D$$UWVSd$U$UGEƋUvBBEw>EEMЉ $UD$ME$E؉$EU>KU$N $MMEċ $L$|$ 4$D$E D$EĉD$M $U>$E$E$E$$e[^_]ÍMEċ$T$|$ 4$D$E D$EĉD$멍v$D$D$넍UU>uUUExD$7D$ D$$D$=D$ D$$UVSd$$t9FtS$D$ ƋD$4$D$4$$d$[^]Í&$D$D$$USd$t @d$[]f/jxmain.jsjxmain.jsUWVSd$ԍl$8l$l$l$8$D$D$@$@ $T$T$ljD$t$@l$8r1t ftt_D$@L/tQ\tLD$4NfN N D TP@vD$ 1qfqD TPl$l$8D$$d$,[^_]USd$D$ $d$[]UVSd$t$$t/$DT$(t$T$ T$ T$d$[^]$D$D$1UWVSd$$|$@t@<$D$ |$4$D$D$$d$,[^_]Ð$D$D$$d$,[^_]UWVSd$$|$Dt@<$D$ D$@|$4$D$D$$d$,[^_]Ív$D$D$$d$,[^_]UWVSd$$tl|$D$$4$|$$D$$d$[^_]$D$D$$d$[^_]UV1Sd$8td$[^]Í&l$t$d$[^]Í&D$ D$$D$UV1Sd$8td$[^]Í&l$t$d$[^]Í&$D$D$USd$t4@t%@X$$d$[]Ðt&א$D$D$11UWVSd$$D$$|$4$uL4$4$4$|$$D$$d$[^_]Ðt&|$$D$똍t&$D$D$$d$[^_]UWVSd$D$0T$4@GotYt&@t 9P}@ u9t79Q2q $l$l$($4$od$[^_]Íd$1[^_]UWVSd$|$4t'vW D$0T$$w<$u܍d$[^_]UWVSd$ԍD$D$D$xt9W D$T$$w<$u܃l$D$;D$ud$,[^_]UWVSd$ԋD$D|$@ptPD$HFtƋV9F 1ut$u(9N7Gd$,[^_]pt&'D$D9p t;4$l$8t$ŋD$HU9~D$Gd$,[^_]wUWVSd$Eu }̍@NjPxEȅe&@t 9p}@ u9;9q2ыRt 9r}R u9t 9qE}̉uE@|9AE9E9H / $M9pH Mĉʅ9BE19u$UUEQUȉA|$ L$T$4$ME}̋Mȍ@DA@e[^_]}E9H $M9p~;MA tpYe[^_]þbEȋPtP9r|1EUЉD$Eȉ$D$EԃMЅk1ʐt&UWVSd$u$4$ljEFGFGF G FGG4$E4u̍VIMEH@Mą ыRt ;r~R u}9Mĉut%};y|E|$$E@Uċ}ȋu ‹@t ;p~@ u}9Uĉut ;rE̋MEEE@DE9B9ẺE9Pc$UE;AUB 5ʅ9MA9}E$M}‹uMxpEĉT$L$D$ EUĉ$E}Uč@DEȉBE̍e[^_%?])Í&E9P $UE;A~-Q tU5EHtHE;A~1EUЉD$E$D$EԃUЅ]UrEѐt&UWVSd$䍻<$t$|$$@@@@ 9u߉t$D$$d$[^_]void jxcore::JXEngine::LeaveScope()void jxcore::JXEngine::EnterScope()v8::Local jxcore::JXFunctionWrapper::GetFunction() $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0AB EC AAA I Pdx,MAB CV AAA A ,gAB Cx AAA G (AB By AA H $/AB A` A C <@nAA AAO@VAA AA &AB A`A (tAB BH AA A 8AB Ce AAA B qAAA 8 AB Cc AAA D qAAA 8HAB C AAA A qAAA DAA CO O C AAH Y C CAH DzAA CO O C AAH Y C CAH $rAB A} A F <Pd8xAB C AAA F QAAA PAA AAO0n CA AAA DCA AA(MAB CCAAA (4AB CAAA T`AA AAO@V CA AAC I AC AAC <AB Ce AAA A z AAA A ,AB C CGH J ((AB CAAA Th.symtab.strtab.shstrtab.text.data.bss.rodata.str1.4.text.unlikely._Z17extensionCallbackRKN2v89ArgumentsE.rel.text._Z17extensionCallbackRKN2v89ArgumentsE.text.unlikely.JX_CreateRIThread.text.JX_CreateRIThread.text.unlikely.JX_JoinRIThread.text.JX_JoinRIThread.text.unlikely.JX_ProcessExitResult.rel.text.JX_ProcessExitResult.rodata.str1.1.text.unlikely.JX_DefineExtension.rel.text.JX_DefineExtension.text.unlikely.JX_SetNativeMethod.rel.text.JX_SetNativeMethod.text.unlikely.JX_InitializeNewEngine.rel.text.JX_InitializeNewEngine.text.unlikely.JX_GetThreadId.rel.text.JX_GetThreadId.rodata.text.unlikely.JX_InitializeOnce.rel.text.JX_InitializeOnce.text.unlikely.JX_Initialize.rel.text.JX_Initialize.text.unlikely.JX_Evaluate.rel.text.JX_Evaluate.text.unlikely.JX_DefineMainFile.rel.text.JX_DefineMainFile.text.unlikely.JX_DefineFile.rel.text.JX_DefineFile.text.unlikely.JX_StartEngine.rel.text.JX_StartEngine.text.unlikely.JX_LoopOnce.rel.text.JX_LoopOnce.text.unlikely.JX_Loop.rel.text.JX_Loop.text.unlikely.JX_QuitLoop.rel.text.JX_QuitLoop.text.unlikely.JX_IsV8.text.JX_IsV8.text.unlikely.JX_IsSpiderMonkey.text.JX_IsSpiderMonkey.text.unlikely.JX_IsChakra.text.JX_IsChakra.text.unlikely.JX_StopEngine.rel.text.JX_StopEngine.text.unlikely.JX_RemoveStoredValue.rel.text.JX_RemoveStoredValue.text.unlikely._ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E.rel.text._ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E.text.unlikely.__tcf_0.rel.text.__tcf_0.text.unlikely._ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE24_M_get_insert_unique_posERS1_.text.unlikely.JX_GetStoredValueType.rel.text.JX_GetStoredValueType.text.unlikely.JX_StoreValue.rel.text.JX_StoreValue.text.unlikely._GLOBAL__sub_I_jx.cc.rel.text.startup._GLOBAL__sub_I_jx.cc.rel.init_array.rodata._ZZN6jxcore8JXEngine10LeaveScopeEvE19__PRETTY_FUNCTION__.rodata._ZZN6jxcore8JXEngine10EnterScopeEvE19__PRETTY_FUNCTION__.rodata._ZZN6jxcore17JXFunctionWrapper11GetFunctionEvE19__PRETTY_FUNCTION__.bss._ZL10stored_ids.bss._ZL13stored_values.bss._ZL9callbacks.bss._ZL12extension_id.bss.app_args.bss.argv.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group  aA^  Ybk$\$] !"$%'(*+-.0134679:<=>?@ABCEF`HIKLLNOQRTU_WXXeZ\]^_`abcdefgij,16,;h@EJlPLV\b h'n?t zKPSk8$h g-Pz%Iy19FY{ f$M7Gm%;Qcugc&Bd/sn"d&%t(+7.E1Tz4z7 r:  =' ?9 AE CS q   F   M"Ia "O  R S  U        jx.cc_ZL9callbacks_ZZN6jxcore17JXFunctionWrapper11GetFunctionEvE19__PRETTY_FUNCTION___ZL12extension_id_ZZN6jxcore8JXEngine10LeaveScopeEvE19__PRETTY_FUNCTION___ZZN6jxcore8JXEngine10EnterScopeEvE19__PRETTY_FUNCTION___ZL13stored_values__tcf_0_ZL10stored_ids_GLOBAL__sub_I_jx.cc_ZStL8__ioinit.LC3.LC0.LC1.LC2.LC8.LC9.LC12.LC11.LC10.LC15.LC18.LC21.LC24.LC25.LC28.LC27.LC30.LC33.LC34.LC32.LC36.LC38.LC45.LC47.LC46.LC44_Z17extensionCallbackRKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZNK2v85Value8IsUint32Ev_ZNK2v85Value12IntegerValueEvmalloc_ZN6jxcore8JXEngine16ConvertToJXValueEPN4node7commonsEN2v86HandleINS4_5ValueEEEP8_JXValue_ZN2v89UndefinedEv_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Evfree_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectEJX_FreeJX_GetString_ZNSsC1EPKcRKSaIcE_ZNSs4_Rep20_S_empty_rep_storageE_ZNSs4_Rep10_M_destroyERKSaIcE_ZN2v84NullEv__assert2JX_CreateRIThreadJX_JoinRIThreadJX_ProcessExitResult__x86.get_pc_thunk.cx_ZN4node7commons17processExitResultEJX_DefineExtension_Z10customLocki_ZN6jxcore8JXEngine14ActiveInstanceEv_ZN2v86LockerC1EPNS_7IsolateE_ZN2v87Isolate5EnterEv_ZN2v87Context5EnterEv_ZN6jxcore8JXEngine17DefineProxyMethodEN2v86HandleINS1_6ObjectEEEPKciPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN2v87Context4ExitEv_ZN2v87Isolate4ExitEv_ZN2v86LockerD1Ev_Z12customUnlocki_ZN2v87Isolate10GetCurrentEv__android_log_printJX_SetNativeMethod_ZNK2v85Value8ToObjectEvJX_InitializeNewEngine_ZN4node7commons25threadIdFromThreadPrivateEv_Znwjapp_args_ZN6jxcore8JXEngineC1EiPPcb_ZN6jxcore8JXEngine10InitializeEvJX_GetThreadIdJX_InitializeOnce_ZN6jxcore8JXEngine13DefineGlobalsEvstrlenargvJX_InitializeJX_Evaluate_ZN6jxcore8JXEngine8EvaluateEPKcS2_P8_JXValueJX_DefineMainFile_ZN6jxcore8JXEngine9MemoryMapEPKcS2_jbJX_DefineFileJX_StartEngine_ZN4node7commons18processExitInvokedE_ZN6jxcore8JXEngine5StartEvJX_LoopOnce_ZN6jxcore8JXEngine8LoopOnceEv_ZN4node7commons18getCurrentThreadIdEvJX_Loop_ZN6jxcore8JXEngine4LoopEvJX_QuitLoopuv_stopJX_IsV8JX_IsSpiderMonkeyJX_IsChakraJX_StopEngine_ZN6jxcore8JXEngine7DestroyEv_ZN6jxcore8JXEngineD1Ev_ZdlPvJX_RemoveStoredValue_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_JX_ClearPersistent_ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E_ZNSt8_Rb_treeIlSt4pairIKlP8_JXValueESt10_Select1stIS4_ESt4lessIlESaIS4_EE24_M_get_insert_unique_posERS1__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_baseJX_GetStoredValueType_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_baseJX_StoreValue_ZnajJX_MakePersistentJX_GetThreadIdByValue__dso_handle_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev__cxa_atexitpthread_create y z${,|4}g~ P*K] Yx g Z/EP[y=Wx [ M \ z y z# Q, Q: P?{x#/;GSex ] ^ _  K `- a7 LA `Iy z#) Q2 Q< PA{x!,IT_jvx ] ^ a' L1 `9G _Q K[ `cy z!(=Maiu b ^y z)y z ^$ c@L]m      # 2:I day zy z% eDY fc ^ly z!&4> gVby h ^y z!&4T`y i ^y z".4 ^@I j]eo k l ^y z5AYc mm ^}y z5Aa nk ^ty z*}8Y nc ^ly z"2 o8 ^LT`hpz p q r ^y z! Oemyy z/:y z Oozy zy z O$Ly z -U` Nu O]+{y z T %+;A O =G T h |D "$&L(*,.@0T2h4|68 ;8=d@BD,GXUlV 4 m @ m Lm Tmy\!\'\,2\^;u q @IXm X ` c p s 8 4 @JmS2 bO P M @K m  g @4L(m  @\Mpm'I/E @M m^f n @Mm"& @Nm%t @N@m( 4.@* @N`m+Fgc @TOXm.{ @Om1mp @4PHm4z @|P@m7 z+r' @P@m:=Tb #0 @PmC-%0! @Q0mF@M  @Q mI1-L@ H @Q(mLZ @RmOGpl @,R@mR @lRhmU  @RPmXD  @$SmZ`$ ]$  A@ @ @  @*  A  O  Y  m     0 (    x @,Smj(& / nx = jxcore.o/ 1560953082 501 20 100644 50480 ` ELF4(Z[]^`acdfgopUSd$D$ 耉$UWVSd$ąD$(T$,Љ׉1T$ЉD$t&$;|$tu|$ > $D$$D$|$$|$21t ftD$l$D$;D$(twD$l$HL$,T$$t$ 4 $L$ L$ hrD$uPuh|D$($D$$tS'D$$T$(d$<[^_]q|$t&vfG1UWVSd$~ $t&'d$,[^_]D$$t&$cl$ul$tD$d1&t,D$ D$<$D$T$T$)ƅd$,[^_]UVSd$D$4t$D$D$D$D$$D$D$0t$D$$d$ [^]D$@@<--expose_debug_asv8debugJXEngine was already Init'ed jxcore-log../src/jxcore.hentry_file_name_NODE_INVALID_UTF8proxy_method:scriptbinding:stringifybinding:parseUnsupported return type.natives@jx_sourceUWVSd$D$|D$$D$pp$T$|$D$l$&|$$^DD$p@T$$D$p@T$$D$p@$D$p@T$$|$$u D$p@x@tD$xd$\[^_]Ðt&T$$D$ D$D$p@$D$p@$D$xd$\[^_]Í&D$xD$D$tD$D$p$D$pT$x@HFD$EЉ$EVME؉$EF $EF1ҋt $D$ EċN$|$L$UEEăD$ |$EEL$$EUD$ D$Eĉ$D$E$E$E$>FuVED$ED$E $e[^_]Ðt&D$ D$$D$e[^_]Ít&F$뗐t&F$D$=D$ D$$D$7D$ D$$UWVSd$$uRE ED$E $F‹E EE >~F[$uf$$D$EEF4$UD$ ED$E D$U1ɀ:ESv<$FE4$UD$ ED$E D$UM:tEEMЉ $MD$E$E؉$EEĉ$EEăD$ D$D$E$EăF $E$=Fx@TD$<$VEt $EED$E$Eă$F@XBE$FPXD$T$ T$$E$F@XF@XE$E$E$E$FHX$E ~ E$$ Bt*J t&@t ;x~@ uB9t;y}'$ >@e[^_]Í& $D$U$Uj@ FPXB1MMht&$|$F}b&FUF$Fx@D$@A$&$?f&FUUMD$=D$ D$$D$7D$ D$$$D$D$UWEVSd$u$EE$uNjE<$D$D$D$ED$ ED$D$D$ED$ 4$D$Eă|$D$ EE4$D$ED$ 4$D$EĉD$Eă4$D$Eă<$E4$}ă4$ED$ D$D$4$Eă4$D$EăD$4$EED$ED$ <$D$EĉD$E }ЅtoE $Eԉ4$Eă4$D$EЉD$Eĉ4$D$ D$ED$E$e[^_]Í&E똍&EUWVSd$t$`~t d$L[^_]f>l$XFD$D$($D$VD$0$D$~ <$N 1t $$<$D$$D$$>tUFJF$d$L[^_]ÍvF$ZfL$L$lD$=D$ D$$D$7D$ D$$UWVSd$u?E ED$E $F‹E EE FFEE$F>4$D$ ED$E D$?MF+|$EЉ$E<$E؉$EF$Eĉ$EEăD$ D$D$E$EăF $E$ED$$Vt $ED$E$Eă$U ~ E$E$E$<$E$>FtF$e[^_]Ð$$D$EEFDǀD$ǍEЉ$E<$E؉$EEĉ$EEăD$ D$D$E$EăF $E$FF$s$T$UUFU=$t&$Mt&UUD$7D$ D$$D$=D$ D$$$D$D$USd$D$ PxT$P$T$ud$[]fd$[]UWVSd$t$`>{$ F@ $ FD$D$($D$FD$0$D$F $D$V1t $$FHX/FPX$D$$D$$D$$$ F@ $ $ GVt/RXO@t 9P}@ uG9t9Q~?$ >FtF$d$L[^_]Ð $D$$o맍$F&FF$If&T$T$6D$=D$ D$$D$7D$ D$$UWEVSd$u$} Eу}̍}ą$<$ủEUă<$T$UăEt$T$D$ <$D$Eă<$D$EăD$4$D$UЋEE4$4$E$e[^_]Í&RR'Ečủ|$$Eă눍D$D$ <$T$EEUčD$ D$<$L$UUED$ T$<$D$Eă<$D$Eăt $u1t&dž1\KUW}VSd$<$M E UuąML$ ML$D$4$EM UċEUԋ$4$EUă4$T$UԋET$Uĉ4$D$ D$T$Eă<$D$u<$Ee[^_]UD$ T$Dt&D$D$ 4$L$UEEăD$ 4$EEL$D$ED$ 4$D$EĉD$Eă4$D$EăUt*$UM UUu#1t&E Uǀ1UWVSd$ċ}uFFEE ƒE F$tFF E $ED$E $E ƒ~$M<E $~e[^_]Ðt&PzB@ Fe[^_]Í&M EF$L$E$F 9E $}FF f@@M EF$L$E$F E $-E؍E$EEUEt$U؉EE UԉD$E܉$M$ M@@EMUԉ1t $UU؉GEtGEU؉D$E܉$MU1t $UUG~F F t&Ht&FF {t&E $EEF L$|$$D$ }<$F $UU1t<$M܈UMUNJFe[^_]fF$NjEUE U$U~F vHyh@ UMԈUMU EMUUqUWVSd$MEEuċM@@@ @E|$D$ 4$D$U Eĉ|$T$D$ 4$EEԉ$}ĉEED$ |$4$D$EăD$4$E}ĉ$EtcE4$D$E}@ $}ƋEUt <$‹Ep@ E|$D$E$EE$Ee[^_]ËE4$D$E}@ $}UҋUtHt <$‹EEp@ 놐t&5t&U,vUUWVSd$t$`>F|$(<$D$NT$0$T$N $L$FD$ D$lD$D$hD$D$d$L$D$ $T$$<$D$>tuVtHVD$$D$d$L[^_]fFD$ D$lD$D$hD$D$d$d$L[^_]Ít&F$D$=D$ D$$UWEVSd$$EEyEEEEt $Euԉ4$Eԃ EЍE9OD$D$ D$4$MEԃ4$D$MăED$L$4$EEȃD$ D$EԉD$EЉ$<$;Ẻt@GlD$GD$ GD$EЉD$E$<$;Ẻu4$D$ED$ D$EЃD$ D$EԉD$E$E$e[^_]EUWVSd$t$`>F|$(<$D$NT$0$T$N $L$FHXT$D$L$ $L$D$ $T$$<$D$>tGVtVD$$D$d$L[^_]Ðt&F$CD$=D$ D$$D$7D$ D$$UWVSd$t$`>td$L[^_]ÍF|$(l$X<$D$VL$0 $L$n ,$l$l$XFPXD$T$ T$$l$D$,$l$XL$ $<$>tFFu)D$d$L[^_]Ít&F$UfF$D$=D$ D$$USd$d$[]UVSFtEl$x8Vt1N t&ыRt ;B~R uV9t ;A|[A^][1^]VST$ Ft:Ft3N@t 9P}@ uF9t 9Q[A^Ð[1^UWVSd$|$4t'vW D$0T$$w<$u܍d$[^_]UWVSd$D$0xt$W D$0T$$w<$u܍d$[^_]UWVSd$ċt$Tuq4$t$t`F D$D$P$FD$FP;tȋt>H$D$/D$4$t$ud$<[^_]Í&HyxUWVSd$ċD$Ppu~4$t$thF D$D$P$FD$FP;tȋtFH$D$/D$4$t$u&d$<[^_]Í&HyxUWVSd$ԋD$D|$@ptPD$HFtƋV9F 1ut$u(9N7Gd$,[^_]pt&'D$D9p t;4$l$8t$ŋD$HU9~D$Gd$,[^_]wUWVSd$EuẺ‹F @ FtƃzUȅ$F$ Uȋ~B&J @t 9x}@ uB99y}9J Et+ $UĉME9xU@ MMȅMȍB9E9A$UUEQUĉAL$<$BD$ EȉMȉD$UċMȃBq$ E FFEF ËF4$D$D$e[^_]ÐJ}EtBE9x|9t&EЍMT$L$$UEԃMЋUĉEȅa1UWVSd$ċ}E R G WPXGW$ @J}wQ ‹@t 9p}@ u@99rEB$ pP vtFyv u@9z=B}@GPЍw fƋ@tHy@ u@9FF֋}@GP t&vtFyv uэ@9NzEE9P  $UȉMPEx M̋UȅDEʅ@9E9B$UUEQAỦL$4$@T$D$ MM̃@AM@Ae[^_]fuE9P t$$U9p@ U̅х@9A9EE$Mu‹}M̉pxT$L$U̍@D$ Eȉ$Ũ@gEE9P l$UPMx U̅DEх2@9!A9EE$Mu‹}M̉pxT$L$U̍@D$ Eȉ$Ũ@EE9p t 4$‹@B Op@9_E9B$UUƋEVFỦt$<$@T$D$ @@EEpuPEЉ$UT$|$EԃUЅfEEPtPBQ'EЉ$UT$|$EԃuЅ@VMRQtpEEHtPJEЉ$UT$|$EԃuЅfEE@tHqxl'EЉ$UT$|$EԃuЅ‰uELH9qQ1;11f1~E8E%UWVSd$ԋD$DxD$HHD$ωAtQQL$l$8rT$T$9FƉD$D$D$$T$L$)DŅxA 1uȉD$lju[D$l$8$L$D$D$D$L$)΅DƅD$@xx8@D$@d$,[^_]x'D$D9x t7<$l$8|$ŋD$HUrHD$9ΉFƉD$eD$@x뒐|$xD$@d$,[^_]UWVS$tEu @EtJt$E$U}E@|$}T$$|$ }|$e[^_]ÍE҉ED$ED$Eԉ$EEԋPEEEt&}t8GщUp$9FΉL$ML$U)օDƅyŋ uȋEu9`@щUpD$E9։$FΉL$U)D…EE}xE ;E@ ED$ED$E$EԋPEEEt&}t8GщUp$9FΉL$ML$U)օDƅyŋ uȋEu9P@щUpD$E9։$FΉL$U)D…E@E ;EED$ED$E$nEԋPEEE&}t8GщUp$9FΉL$ML$U)օDƅyŋ uȋE}9@щUpD$E9։$FΉL$U)D…E}xE ;EEp@ 1t $NjEL$uD$ D$4$ME<$D$Mua4$MMEUL$D$ 4$D$UUED$ T$<$D$UaEL$D$ 4$D$E|$4$D$E4$D$U fEvED$E؉$EuEEEE؋VEEr@UT$9ƉUEFΉ$L$MMU)DE$D$ED$+UD…E }9 EԉEHfED$E؉$E}EEEu؋FW|$4$9‰щM‰EFщT$UUE+EET$t$<$MUM+UD…F;EEԉEUED$E؉$EuEEEE؋VEEr@UT$9ƉUEFΉ$L$MMU)DE$D$ED$+UD…E ;E}EԉEfED$E؉$EEEEtG}؉E@pL$$9F)T$Dƅv'}E$T$|$EăUENE}9}E؉EEM@ypD$ $9F)T$DDž}1$ EHE $D$E܋UBEBEBE|$T$4$D$ E؃EfED$E؉$EEEEtOU؋GRpU$9FʋU؉L$T$U)օDƅz&'}E$T$|$Eă}}EEX;}OE؋PU֋WJT$$M9Ft$M+MD1$ EHE $D$E܋UBEBEBE|$T$4$D$ u`&ED$E؉$EEEEt?}؉E@pL$$9F)T$Dƅf}E$T$|$EăUEpE}9}E؉EEM@ypD$ $9F)T$DDž}1$ EHE $D$E܋UBEBEBE|$T$4$D$ E؃E}W$U؉T$}xW%$U؉T$}3W $U؉T$E9 K$U@MMp$L$9F։T$+uDƅPMA EDEErE9 $U@MMp$L$9F։T$+uDƅMA EDEEE9 tI$UNj@Ht$$M9FщT$M+MDG e} E9$UNj@Mp $D$9F։T$M)DEp f}DE9$UNj@Mp $D$9F։T$M)DEp }E9/$MNj@PD$4$ыUM9FщT$U+UD…EM@ }N$UӉT$}W`$UӉT$L}tPW$UӉT$WJOiWJOWJOWJO믋}GWJOdNQV}v}>1]1&EE}^}$ EH$ }HE$ }HE/E؉UEE؉UEnUWVSd$䍻<$t$|$$@PP @@PD$t$$t$ @D$ǃǃ$ǃd$[^_]void jxcore::JXEngine::LeaveScope()void jxcore::JXEngine::EnterScope()_$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 'AB A<8~AC ACOP, AA AAA 8xAB AD} AAA A AAA $dAB B\AA <AB C AAA F ] AAA H <0AA AAO@] AA AAD ,pWAB Ai A B eA <:AB Cy AAA F h AAA E ,AB C_ AAA H ,%AB F AAA H T@nAA AAO`N AA AAC  AA AAD ,AB C AAA B ,TAB A@ A C JA ,AB C AAA B ,(AB F AAA H ,XAB AE AAA D LyAB C AAA F f FCA H  FCA C ,AB Cv AAA A <XAB C AAA C h AAA E ,HAB F AAA A ,xZAB C AAA F TEAF AAO`M AA AAG  AA AAE @AB AzA 8$fAA AW  DAA A CA,`]AA P DB AC(MAB CCAAA (MAB CCAAA ,AB C AAA H ,AB C AAA H THAA AAO@V CA AAC I AC AAC ,AB C AAA B ,AB Cl AAA C PlAA AAO@ AA AAC uAA AA,T~AB Cp AAA G (AB CAAA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN6jxcoreL10SignalExitEi.rel.text._ZN6jxcoreL10SignalExitEi.text.unlikely._ZN6jxcoreL9copy_argvEiPPc.rel.text._ZN6jxcoreL9copy_argvEiPPc.text.unlikely._ZN6jxcoreL14WaitThreadExitEP9uv_loop_s.rel.text._ZN6jxcoreL14WaitThreadExitEP9uv_loop_s.text.unlikely._ZN6jxcore21RegisterSignalHandlerEiPFviE.rel.text._ZN6jxcore21RegisterSignalHandlerEiPFviE.text.unlikely._ZN6jxcore8JXEngine9ParseArgsEiPPc.text._ZN6jxcore8JXEngine9ParseArgsEiPPc.rodata.str1.1.text.unlikely._ZN6jxcore8JXEngine4InitEiPPcb.rel.text._ZN6jxcore8JXEngine4InitEiPPcb.text.unlikely._ZN6jxcore8JXEngineD2Ev.rel.text._ZN6jxcore8JXEngineD2Ev.text.unlikely._ZN6jxcore8JXEngine13DefineGlobalsEv.rel.text._ZN6jxcore8JXEngine13DefineGlobalsEv.rodata.str1.4.text.unlikely._ZN6jxcore8JXEngine9MemoryMapEPKcS2_jb.rel.text._ZN6jxcore8JXEngine9MemoryMapEPKcS2_jb.text.unlikely._ZN6jxcore8JXEngine16InitializeEngineEiPPc.rel.text._ZN6jxcore8JXEngine16InitializeEngineEiPPc.text.unlikely._ZN6jxcore12DeclareProxyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPKciPFNS4_INS3_5ValueEEERKNS3_9ArgumentsEE.rel.text._ZN6jxcore12DeclareProxyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPKciPFNS4_INS3_5ValueEEERKNS3_9ArgumentsEE.text.unlikely._ZN6jxcore8JXEngine5StartEv.rel.text._ZN6jxcore8JXEngine5StartEv.text.unlikely._ZN6jxcore8JXEngine24InitializeEmbeddedEngineEiPPc.rel.text._ZN6jxcore8JXEngine24InitializeEmbeddedEngineEiPPc.text.unlikely._ZN6jxcore8JXEngine10InitializeEv.rel.text._ZN6jxcore8JXEngine10InitializeEv.text.unlikely._ZN6jxcore8JXEngine7DestroyEv.rel.text._ZN6jxcore8JXEngine7DestroyEv.text.unlikely._ZN6jxcore12JX_StringifyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPj.rel.text._ZN6jxcore12JX_StringifyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPj.text.unlikely._ZN6jxcore8JX_ParseEPN4node7commonsEPKcj.rel.text._ZN6jxcore8JX_ParseEPN4node7commonsEPKcj.text.unlikely._ZN6jxcore8JXEngine16ConvertToJXValueEPN4node7commonsEN2v86HandleINS4_5ValueEEEP8_JXValue.rel.text._ZN6jxcore8JXEngine16ConvertToJXValueEPN4node7commonsEN2v86HandleINS4_5ValueEEEP8_JXValue.text.unlikely._ZN6jxcore9Evaluate_EPKcS1_P8_JXValuePN4node7commonsE.rel.text._ZN6jxcore9Evaluate_EPKcS1_P8_JXValuePN4node7commonsE.text.unlikely._ZN6jxcore8JXEngine8EvaluateEPKcS2_P8_JXValue.rel.text._ZN6jxcore8JXEngine8EvaluateEPKcS2_P8_JXValue.text.unlikely._ZN6jxcore8JXEngine22InitializeProxyMethodsEPN4node7commonsE.rel.text._ZN6jxcore8JXEngine22InitializeProxyMethodsEPN4node7commonsE.text.unlikely._ZN6jxcore8JXEngine4LoopEv.rel.text._ZN6jxcore8JXEngine4LoopEv.text.unlikely._ZN6jxcore8JXEngine8LoopOnceEv.rel.text._ZN6jxcore8JXEngine8LoopOnceEv.text.unlikely._ZN6jxcore8JXEngine8ShutDownEv.rel.text._ZN6jxcore8JXEngine8ShutDownEv.text.unlikely._ZN6jxcore8JXEngine14ActiveInstanceEv.rel.text._ZN6jxcore8JXEngine14ActiveInstanceEv.text.unlikely._ZN6jxcore8JXEngine21GetInstanceByThreadIdEi.rel.text._ZN6jxcore8JXEngine21GetInstanceByThreadIdEi.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E.text.unlikely._ZNSt3mapIiPN6jxcore8JXEngineESt4lessIiESaISt4pairIKiS2_EEED2Ev.rel.text._ZNSt3mapIiPN6jxcore8JXEngineESt4lessIiESaISt4pairIKiS2_EEED2Ev.text.unlikely._ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E.rel.text._ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E.text.unlikely._ZNSt3mapISsN6jxcore8JXMethodESt4lessISsESaISt4pairIKSsS1_EEED2Ev.rel.text._ZNSt3mapISsN6jxcore8JXMethodESt4lessISsESaISt4pairIKSsS1_EEED2Ev.text.unlikely._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1_.text.unlikely._ZN6jxcore8JXEngineC2EiPPcb.rel.text._ZN6jxcore8JXEngineC2EiPPcb.text.unlikely._ZN6jxcore8JXEngineC2EPN4node7commonsE.rel.text._ZN6jxcore8JXEngineC2EPN4node7commonsE.text.unlikely._ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE24_M_get_insert_unique_posERS1_.rel.text._ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE24_M_get_insert_unique_posERS1_.text.unlikely._ZN6jxcore8JXEngine17DefineProxyMethodEN2v86HandleINS1_6ObjectEEEPKciPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE.rel.text._ZN6jxcore8JXEngine17DefineProxyMethodEN2v86HandleINS1_6ObjectEEEPKciPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE.text.unlikely._GLOBAL__sub_I_jxcore.cc.rel.text.startup._GLOBAL__sub_I_jxcore.cc.rel.init_array.rodata._ZZN6jxcore8JXEngine10LeaveScopeEvE19__PRETTY_FUNCTION__.rodata._ZZN6jxcore8JXEngine10EnterScopeEvE19__PRETTY_FUNCTION__.bss._ZZN6jxcore8JXEngine13DefineGlobalsEvE16instance_inited_.bss._ZN6jxcoreL15methods_archiveE.bss._ZN6jxcore19jx_engine_instancesE.bss._ZN6jxcore8JXEngine17JS_engine_inited_E.bss._ZN6jxcore8JXEngine20jxcore_was_shutdown_E.data._ZN6jxcoreL21jxcore_first_instanceE.rel.data.rel.local._ZN6jxcoreL9jx_sourceE.bss._ZStL8__ioinit.rodata.cst4.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    ' %~@ !h|#$%$z${'(*+-.0134679:<=?@BCEFHI*}KLNOQRTUWXZ[]^`acdfgijHlmoprsuvlvxz{|}~8S##CL#d##v## O(dQ\f%BHr~7IhW!:%7Ig6Ldv(7[av[ y     D q        B e      %+Z b    - U r   n. 1T4A7_: U=~y@ &? ':SCXFIVZLEO@R fUFm]XM"[M"^OM"^"a"dH"d"g-jIqjmmFl"p~s.Al jxcore.cc_ZN6jxcoreL10SignalExitEi_ZN6jxcoreL9copy_argvEiPPc_ZN6jxcoreL14WaitThreadExitEP9uv_loop_s_ZZN6jxcore8JXEngine13DefineGlobalsEvE16instance_inited__ZZN6jxcore8JXEngine10LeaveScopeEvE19__PRETTY_FUNCTION___ZZN6jxcore8JXEngine10EnterScopeEvE19__PRETTY_FUNCTION___ZN6jxcoreL9jx_sourceE_ZN6jxcoreL15methods_archiveE_ZN6jxcoreL21jxcore_first_instanceE_GLOBAL__sub_I_jxcore.cc_ZStL8__ioinit.LC6.LC7.LC5.LC10.LC11.LC16.LC13.LC17.LC15.LC14.LC19.LC20.LC22.LC23.LC29.LC30.LC32.LC33.LC35.LC39.LC51_ZNSt3mapIiPN6jxcore8JXEngineESt4lessIiESaISt4pairIKiS2_EEED5Ev_ZNSt3mapISsN6jxcore8JXMethodESt4lessISsESaISt4pairIKSsS1_EEED5Ev__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE_uv_tty_reset_mode_exitstrlenmalloc_Z14getThreadCountvusleep_ZN4node7commons11CleanPingerEiuv_run_jx_ZN6jxcore21RegisterSignalHandlerEiPFviEsigfillsetsigaction_ZN6jxcore8JXEngine9ParseArgsEiPPc_ZN6jxcore8JXEngine4InitEiPPcbuv_nowuv_idle_inituv_check_inituv_unrefuv_signal_init_ZN4node24EnableDebugSignalHandlerEP11uv_signal_siuv_signal_startuv_disable_stdio_inheritance_Znaj_ZN2v82V823SetFlagsFromCommandLineEPiPPcb_ZN2v819ResourceConstraintsC1Ev_ZN2v822SetResourceConstraintsEPNS_19ResourceConstraintsE_ZN6jxcore8JXEngineD2Ev_ZNSs4_Rep20_S_empty_rep_storageE_Z10customLocki_ZN6jxcore19jx_engine_instancesE_Z12customUnlocki_ZNSs4_Rep10_M_destroyERKSaIcE_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS__ZdlPv_ZN6jxcore8JXEngineD1Ev_ZN6jxcore8JXEngine13DefineGlobalsEv_Z13jx_init_locksv__android_log_print_ZN6jxcore8JXEngine9MemoryMapEPKcS2_jb_ZNSs6assignEPKcj_ZN2v86LockerC1EPNS_7IsolateE_ZN2v811HandleScopeC1Ev_ZN2v87Context5EnterEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v87Context4ExitEv_ZN2v811HandleScopeD1Ev_ZN2v86LockerD1Ev_ZN4node10MemoryWrap9SharedSetEPKcS2_j_ZN2v87Isolate4ExitEv_ZN2v87Isolate5EnterEv__assert2_ZN6jxcore8JXEngine16InitializeEngineEiPPcgetenvuv_setup_args_ZN4node6crypto13EntropySourceEPhj_ZN2v82V816SetEntropySourceEPFbPhjE_Znwj_ZN4node7commonsC1Ei_ZN6jxcore8JXEngine17JS_engine_inited_E_ZN2v87Isolate10GetCurrentEv_ZN4node7commons11newInstanceEi_ZN2v814ObjectTemplate3NewEv_ZN2v87Context3NewEPNS_22ExtensionConfigurationENS_6HandleINS_14ObjectTemplateEEENS3_INS_5ValueEEE_ZN4node12OnFatalErrorEPKcS1__ZN2v82V820SetFatalErrorHandlerEPFvPKcS2_E_ZN4node18SetupProcessObjectEib_ZN2v87Context6GlobalEv_ZN14v8_typed_array14AttachBindingsEN2v86HandleINS0_6ObjectEEE_ZN4node4LoadEN2v86HandleINS0_6ObjectEEE_ZN4node8EmitExitEN2v86HandleINS0_6ObjectEEE_ZN4node9RunAtExitEv_ZN4node7commons15process_status_E_ZN4node7commons15threadPoolCountE_ZN4node7commons7DisposeEv_ZN4node13removeCommonsEvfree_ZN2v82V810InitializeEv_ZN4node7commons16embedded_source_E_ZN4node7commons14setMainIsolateEv_ZN4node11EnableDebugEbPNS_7commonsE_ZN4node10MemoryWrap8MapClearEb_ZN6jxcore3Job13removeTaskersEv_ZN4node16WRITE_UTF8_FLAGSEabort_ZN6jxcore12DeclareProxyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPKciPFNS4_INS3_5ValueEEERKNS3_9ArgumentsEEsprintf_ZN2v86Script7CompileENS_6HandleINS_6StringEEENS1_INS_5ValueEEES3__ZN2v86Script3RunEv_ZN2v86Object3NewEv_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86String9NewSymbolEPKci_ZN2v87Context10GetCurrentEv_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZN6jxcore8JXEngine5StartEv_ZN6jxcore8JXEngine24InitializeEmbeddedEngineEiPPc_ZN6jxcore8JXEngine10InitializeEv_ZN6jxcore8JXEngine7DestroyEv_ZN6jxcore12JX_StringifyEPN4node7commonsEN2v86HandleINS3_6ObjectEEEPj_ZNK2v85Value8ToStringEv_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEv_ZN6jxcore8JXStringD1Ev_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN6jxcore8JX_ParseEPN4node7commonsEPKcj_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN6jxcore8JXEngine16ConvertToJXValueEPN4node7commonsEN2v86HandleINS4_5ValueEEEP8_JXValue_ZNK2v85Value9IsBooleanEv_ZNK2v85Value8IsNumberEv_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZNK2v85Value8ToObjectEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZNK2v85Value7IsInt32Ev_ZNK2v86String6LengthEv_ZNK2v85Value10IsFunctionEv_ZN2v89UndefinedEv_ZNK2v85Value8IsObjectEv_ZN6jxcore9Evaluate_EPKcS1_P8_JXValuePN4node7commonsE_ZN2v88TryCatchC1Ev_ZNK2v88TryCatch9HasCaughtEv_ZNK2v88TryCatch9ExceptionEv_ZN2v88TryCatchD1Ev_ZN6jxcore8JXEngine8EvaluateEPKcS2_P8_JXValue_ZN6jxcore8JXEngine22InitializeProxyMethodsEPN4node7commonsE_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base_ZN6jxcore8JXEngine4LoopEv_ZN6jxcore8JXEngine8LoopOnceEv_ZN6jxcore8JXEngine8ShutDownEv_Z16jx_destroy_locksv_ZN6jxcore8JXEngine20jxcore_was_shutdown_E_ZN6jxcore8JXEngine14ActiveInstanceEv_ZN4node7commons18getCurrentThreadIdEv_ZN6jxcore8JXEngine21GetInstanceByThreadIdEi_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E_ZNSt3mapIiPN6jxcore8JXEngineESt4lessIiESaISt4pairIKiS2_EEED2Ev_ZNSt3mapIiPN6jxcore8JXEngineESt4lessIiESaISt4pairIKiS2_EEED1Ev_ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE8_M_eraseEPSt13_Rb_tree_nodeIS4_E_ZNSt3mapISsN6jxcore8JXMethodESt4lessISsESaISt4pairIKSsS1_EEED2Ev_ZNSt3mapISsN6jxcore8JXMethodESt4lessISsESaISt4pairIKSsS1_EEED1Ev_ZNSt8_Rb_treeIiSt4pairIKiPN6jxcore8JXEngineEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZN6jxcore8JXEngineC2EiPPcb_ZN4node7commons20self_hosted_process_E_ZN4node7commons20getAvailableThreadIdEb_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS__ZN6jxcore8JXEngineC1EiPPcb_ZN6jxcore8JXEngineC2EPN4node7commonsE_ZN6jxcore8JXEngineC1EPN4node7commonsE_ZNSt8_Rb_treeISsSt4pairIKSsN6jxcore8JXMethodEESt10_Select1stIS4_ESt4lessISsESaIS4_EE24_M_get_insert_unique_posERS1_memcmp_ZN6jxcore8JXEngine17DefineProxyMethodEN2v86HandleINS1_6ObjectEEEPKciPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZNSsC1EPKcRKSaIcE_ZN2v86Object3HasENS_6HandleINS_6StringEEE_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZNSsC1ERKSs__dso_handle_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev__cxa_atexitpthread_create #  Ie  (-` @X .s +@Yu i j8 DTdr k &DJ*  ] ]$9 lC mL 7Mt n*5@Kw o m p [ q  r$ \. q6  s"GT ozITbp!;SepQ{ c0HMaw  p [ q r \ q t m  "Bj us} v8Jj Qlw $ p. [8 q@N rX \b qj @M o,@FNa|#CW_m{ c s"0BJRdz r \ q p [ q t m ;I -3Sp 8D -:Rf} p [ q r \ q  %ao.AV wm| x  [& y@T zj UrESg#8m  {BP_G[l d9bp  :Ud%8 pB [L qT  P^j ^s ^<DT |l :Udm p [$ q,: rD \N qV  Lgz% p/ [9 qA   &2     /: /: $?RZ*| ,GZb*   b)>D bMfu%So } BH\9c 4QWz 2T} 5]q2Ha"8 s   An" ^ ^ 7 O" ^ ^  `"f ^} ^  IT |r#$/Aa%  !%d  % F % ^ ^  ^$ ^i % ^% ^ ^< k ^x ^  %6 < ^a %g ^ ^   ^  ^9  W l %  ^ *  *  *J X ^f    ^   $ ^. Q  |  ^    ^   N ^_    *  *!*I1P  d &%'+(;)Aiu) ^ ^ ^ ^ ^ ^)W < | 4t #D%')+,-\/13 5L7|:<>(@dBDFHJLLNQSXUWf4 @ ~L X d p |!',Y'U @ y~ @ 0>@ @PH1mdi @ t2f8p4 @] @x`W @ؘ@! 2sl Rp :N @% @8(o%k @8+n @.4nzpv @1fpT @(4A= @87e @:  F B @=u""y @ @B)'0' @(CB) P)X @F< * * @@I j, p,Z @L -P -EL @Ou /  /@ @0R `/ `/f @0 U1 /q /]m @PX .0, @0M ( @h [ 0 0M @ ^@ 0 0 @@aG11 @@d\2j`2f @(g0303 @@j4F5nP5j @m<# <l @(p==~ @xsMM @8vM @ȭxM$ 3 N$ tDNDNDNDN(DNXDNHN @ЭLNLNPN0TN(|N|N @ح(t&Eĉ$EEăUWVuSd$4$} 4$$x W|}ԍL$D$ D$<$Eԃ<$D$Eԃ<$D$Eԃ4$D$M4$Ee[^_]fEԉ$Uԃ1t$뵐t&GM$EăM~vG}ԃ$MD$UȋEĉ$D$EȃŰMt4$T$MMD$<$L$Eԃ+v<$N}ԉ<$EԃMzUW}VSd$<$u }<$$x~ MtREԉ$Uԃ1t $D$EЉ$MEЉ$Ee[^_]t&EUVJFMԉMȉ$Fv}ȉt$D$<$Eԃ$t$<$D$EEԃ$u1ҋ})Ƹʚ;e)Ɖu׉}ċ}̋ED$|$$UԃE|$UUĉ}̉$t$T$|$ D$ʚ;D$ MȉD$t$ $|$ }̃MD$|$ $uUEԉt$$D$ D$EUĉ|$}̉$t$T$|$ D$ʚ;D$ MȉD$t$ $|$ Mȃ}̋uԉ $D$|$Eԃt$uD$ D$4$t$t&EԉEuȍD$ED$ 4$D$Eԃ4$D$Eԃ4$D$EԃfEȉ$uԃfEԉ$EEԃUWVuSd$4$4$$M x MM Q~}D$ D$E<$D$Eă<$D$Eă<$D$Eă4$D$}4$Ee[^_]Eĉ$Uă1t $D$4$M붍t&:E }ċ@$UU&[E xE @E$ E @#E @D$ED$$EE @E @$E @E @$D$ D$E<$D$Eă<$D$Eă<$D$Eă4$D$}E$vt&U}ĉ<$EăUt&E xKE @EƒD$ E$EE xE @u.D$ v<$EăLt&D$E$D$T$ T$<$D$E HE @@@t&<$Eăt&<$Eăt&<$Eăt&<$Eăt&E$<$Uă1t $D$4$U@@Lv<$UEăU&<$Eă&UWVuSd$4$} 4$$x WMumEĉE$<$E|$D$E$EăD$4$M4$Ee[^_]t&Eĉ$Uă1t$벐t&~~GMĉMƒMG*G$tdWHG$GG$<$t&Eĉ$EEărGGƒ}D$ED$ <$D$Eă<$D$Eă<$D$Ẻ$EOGD$ED$$E}Љ$JЀwSuH1E&rЉ<w)E9DЉEuuE$t&u}D$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$ME$E$EăfE$EăfE$EăfPz@ E$EăfE$Eă@@ot&1UWEVSd$$} E4$$xUWEĉEuD$ED$ 4$D$Eă4$D$Eă4$D$EăD$E$UE$Ee[^_]vEĉ$Uă1t$뮐t&"GUĉU$BB$V4$ud$[^_]UVSd$t"$ T$ PT$$PVxFxd$[^]UWEVSd$$E4$$Su4$U1t $|$D$ 4$T$EED$ D$ED$E$|$D$ 4$D$E4$D$ED$E|$D$ 4$T$EU|$}D$4$UU<$UEUD$ 4$D$ET$D$<$t<$<$E$e[^_]ÐUWEVSd$$E<$$iEԉ$E8u FX u4$U1t $D$ |$4$T$EED$ D$ED$E$D$ |$4$D$E4$D$ED$ED$ |$4$T$EU|$4$UU T$EUD$ D$EUU4$D$T$E$u+E$E$e[^_]ÐUWVuSd$ԋE4$D$ D$D$E4$D$E 4$D$D$}E|$D$ D$E$e[^_]UWVSd$E EEȉ$ƉE4$$EED$ ED$D$$ED$E<$D$ D$uEă4$D$t$<$Eă<$D$D$EMD$ 4$D$ωMD$ D$ED$D$D$<$D$8E<u$Eă1t $D$ D$ED$E$Eăt$D$ D$E$E}D$E|$$D$ED$ |$$uEăD$ t$D$E$9EE$YEă1t $Ƌ}D$ED$ |$$MEĉt$ $D$ D$D$ D$E|$$D$ED$ |$$uMEĉt$ $D$ D$D$ D$E|$$D$ED$ |$$uMEĉt$D$ $D$ED$|$$uă1t4$U}D$E<$D$ D$UEĉt$$D$ D$<$D$E<$D$ D$uUED$ $t$D$<$D$ED$ }D$MD$ED$ L$$}Eă|$D$ D$4$MD$ED$ L$$MD$ED$ L$$}Eă|$D$ D$4$MD$ED$ L$$MD$ED$ L$$}Eă|$D$ D$4$MED$L$$MD$ED$ L$$}Eă|$D$ D$4$MD$ED$ L$$MD$ED$ L$$}Eă|$D$ D$4$MED$L$$MD$ED$ L$$}Eă|$D$ D$4$E$MD$ED$ L$$}Eă|$D$ D$4$MD$ED$ L$$EčMT$EEL$D$ $E<$D$ D$EĉD$MD$ED$ L$$MD$ED$ L$$}Eă|$D$ D$4$MD$ED$ L$$MET$L$$D$ }ĉUEă|$D$ D$4$MD$ED$ L$$MD$ED$ L$$}Eă|$D$ D$4$MD$ED$ L$$MD$ED$ L$$}EăD$ |$D$4$10 wP| ut& tu)‰T$ ȋMD$E $D$MD$ED$ $D$}EăD$ |$D$4$M~$@/u}D$ Et$|$$D$ED$ |$$uEăD$ t$D$E$EE$E$uD$ED$ 4$D$D$ D$ED$D$D$ED$$4$1Eăt $D$ D$ED$E$EăD$ t$D$E$$E$CEă1t $D$ D$ED$E$EăD$ t$D$E$ExE$6Eă1t $D$ D$ED$E$}Eĉt$<$D$ D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$<$D$D$E$UD$ D$uċBt4$D$MD$ED$ L$$Eăt$<$D$ D$E$MD$ED$ L$$uEăt$<$D$ D$U|$$E$e[^_]fEăEăuM}F+A<|$D$E$EăD$ UEFu|$$D$U|$D$$uUEĉt$$D$ D$MEUy<;x D$ BMUMD$E $D$EăMt$EE $D$ED$ D$EĉD$E$MU9z{u}D$ D$t$<$ED$ D$EĉD$E$EHu>@AACDDFG*JGIJJJxMLMOPPRS%SUVTVXYY[\\^_U_abhbdeghjkkmnpqststvwwyzHz|}#f}FhF$2 8 FLMdhrl  { "(. 4:@FLRX^dj pD v|l  ( 3Hdy  8 X    P  $ + 298 @ GX N U \cjq)x17AJ`iq{     ' . 5 < C #J (Q -X 5_ >f Am Ot T{ ] a e k p x           ) 4 > Q c u  # * 1 8 ? F M T [ b i p w ~            # F p     V      ! ( . [ {     EYm7U&()} *CKhrx"/C !(/6K`r,K^pe#Hn=h&.5nU]yq$*BLS\c !g>R=l+R/%RDB2a h>LUlq 2 9 o    b  I  )!X!!"!<"Y": y"""#####$L$i$G%m%t%%%%&1&>&V&c&& node.cc_ZN4nodeL18IdleImmediateDummyEP9uv_idle_si_ZN4nodeL17GetActiveRequestsERKN2v89ArgumentsE_ZN4nodeL15DebugPortGetterEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN4nodeL5AbortERKN2v89ArgumentsE_ZN4nodeL15DebugPortSetterEN2v85LocalINS0_6StringEEENS1_INS0_5ValueEEERKNS0_12AccessorInfoE_ZN4nodeL9EnvGetterEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN4nodeL8EnvQueryEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN4nodeL34DispatchMessagesDebugAgentCallbackEv_ZN4nodeL34DispatchDebugMessagesAsyncCallbackEP10uv_async_si_ZN4nodeL10DebugPauseERKN2v89ArgumentsE_ZN4nodeL6UptimeERKN2v89ArgumentsE_ZN4nodeL8DebugEndERKN2v89ArgumentsE_ZN4nodeL11gid_by_nameEN2v86HandleINS0_5ValueEEE_ZN4nodeL9GetGroupsERKN2v89ArgumentsE_ZN4nodeL6GetGidERKN2v89ArgumentsE_ZN4nodeL6GetUidERKN2v89ArgumentsE_ZN4nodeL3CwdERKN2v89ArgumentsE_ZN4nodeL16NeedTickCallbackERKN2v89ArgumentsE_ZN4nodeL4SpinEP9uv_idle_si_ZN4nodeL27NeedImmediateCallbackSetterEN2v85LocalINS0_6StringEEENS1_INS0_5ValueEEERKNS0_12AccessorInfoE_ZN4nodeL14CheckImmediateEP10uv_check_si_ZN4nodeL13EnvEnumeratorERKN2v812AccessorInfoE_ZN4nodeL9EnvSetterEN2v85LocalINS0_6StringEEENS1_INS0_5ValueEEERKNS0_12AccessorInfoE_ZN4nodeL18ProcessTitleSetterEN2v85LocalINS0_6StringEEENS1_INS0_5ValueEEERKNS0_12AccessorInfoE_ZN4nodeL18ProcessTitleGetterEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN4nodeL6AtExitEv_ZN4nodeL9JXBindingERKN2v89ArgumentsE_ZN4nodeL8RawDebugERKN2v89ArgumentsE_ZN4nodeL10InitGroupsERKN2v89ArgumentsE_ZN4nodeL5UmaskERKN2v89ArgumentsE_ZN4nodeL9SetGroupsERKN2v89ArgumentsE_ZN4nodeL6SetGidERKN2v89ArgumentsE_ZN4nodeL5ChdirERKN2v89ArgumentsE_ZN4nodeL6SetUidERKN2v89ArgumentsE_GLOBAL__sub_I_node.cc_ZStL8__ioinit.LC1.LC2.LC5.LC6.LC3.LC4.LC8.LC11.LC12.LC13.LC14.LC15.LC16.LC19.LC30.LC29.LC34.LC39.LC38.LC40.LC41.LC45.LC44.LC53.LC54.LC55.LC56.LC57.LC60.LC61.LC63.LC65.LC67.LC69.LC71.LC70.LC72.LC73.LC75.LC76.LC78.LC79.LC80.LC82.LC84.LC83.LC87.LC86.LC89.LC90.LC91.LC94.LC95.LC93.LC97.LC96.LC101.LC102.LC103.LC106.LC116.LC115.LC120.LC122.LC125.LC127.LC126.LC129.LC131.LC132.LC136.LC137.LC139.LC142.LC143.LC144.LC145.LC146.LC147.LC148.LC149.LC150.LC151.LC152.LC153.LC154.LC155.LC156.LC157.LC158.LC159.LC160.LC161.LC162.LC163.LC164.LC165.LC166.LC167.LC168.LC169.LC170.LC171.LC172.LC173.LC174.LC175.LC176.LC177.LC178.LC179.LC180.LC181.LC182.LC183.LC184.LC185.LC186.LC187.LC188.LC189.LC190.LC196.LC197.LC198.LC199.LC200.LC201.LC202.LC203.LC204.LC205.LC206.LC207.LC208.LC209.LC210.LC211.LC212.LC213.LC214.LC215.LC216.LC217.LC218.LC219.LC220.LC221.LC222.LC223.LC224.LC191.LC192.LC193.LC194.LC195_ZN4node12UsingDomainsERKN2v89ArgumentsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZNK2v85Value10IsFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v89UndefinedEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Evstderrfwriteabort_ZN4node16GetActiveHandlesERKN2v89ArgumentsE_ZN2v85Array3NewEPNS_7IsolateEi_ZN2v87Integer3NewEiPNS_7IsolateE_ZNK2v85Value8ToObjectEv_ZN4node11MemoryUsageERKN2v89ArgumentsEuv_resident_set_memory_ZN4node11UVExceptionEiPKcS1_S1__ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v86Object3NewEv_ZN2v86Number3NewEd_ZN2v814HeapStatisticsC1Ev_ZN2v82V817GetHeapStatisticsEPNS_14HeapStatisticsE_ZN2v87Integer15NewFromUnsignedEjPNS_7IsolateE_ZN2v87Isolate10GetCurrentEv_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZNK2v85Value12IntegerValueEv_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEvgetenv_ZN6jxcore8JXStringD1Ev_ZN4node10EnvDeleterEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN2v85FalseEvunsetenv_ZN2v84TrueEv_ZN4node27NeedImmediateCallbackGetterEN2v85LocalINS0_6StringEEERKNS0_12AccessorInfoE_ZN4node7commons11getInstanceEvuv_async_send_ZN2v85Debug20ProcessDebugMessagesEv_ZN2v85Debug10DebugBreakEPNS_7IsolateEuv_update_timeuv_now_ZN2v85Debug12DisableAgentEv_ZNK2v85Value8IsUint32Ev__errno_ZNK2v85Value11Uint32ValueEvgetgroups_Znaj_ZdaPv_ZN4node14ErrnoExceptionEiPKcS1_S1_getegidgetgidgetuid_Z10customLockiuv_cwd_Z12customUnlocki_ZN4node18app_sandbox_folderE__android_log_printuv_idle_startuv_idle_stop_ZN2v88TryCatchC1Ev_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZNK2v88TryCatch9HasCaughtEv_ZN4node14FatalExceptionERN2v88TryCatchE_ZN2v88TryCatchD1Ev_ZNK2v85Value12BooleanValueEvuv_check_startuv_check_stopenvironstrchrstrlensetenvuv_set_process_titleuv_get_process_titleuv_tty_reset_mode_ZNK2v85Value8ToStringEv_ZN2v86Object3HasENS_6HandleINS_6StringEEEsnprintf_ZNK2v85Array6LengthEv_ZN4node18get_builtin_moduleEPKc_ZN4node15DefineConstantsEN2v86HandleINS0_6ObjectEEE_ZN4node18JXDefineJavaScriptEv_ZNSsC1EPKcRKSaIcE_ZNSs6appendEPKcj_ZNSs4_Rep20_S_empty_rep_storageE_ZNSs4_Rep10_M_destroyERKSaIcE_ZN4node16DefineJavaScriptEN2v86HandleINS0_6ObjectEEE_ZN4node4ExitERKN2v89ArgumentsE_ZNK2v85Value10Int32ValueEv_ZN4node7commons17processExitResultE_ZN4node7commons18processExitInvokedE_ZN2v82V818TerminateExecutionEPNS_7IsolateEuv_stop_ZN4node12DebugProcessERKN2v89ArgumentsEkill_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEbfprintffflush_ZN4node4KillERKN2v89ArgumentsEuv_kill_ZN4node8SetErrnoE8uv_err_s__udivdi3__umoddi3_ZN4node6HrtimeERKN2v89ArgumentsEuv_hrtime_ZNK2v85Value7IsArrayEv_ZN2v86Object3GetEj_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEEinitgroupsumask_ZNK2v85Value7IsInt32Evsetgroupssetgiduv_chdirsetuid_ZN4node6DLOpenERKN2v89ArgumentsE_ZN4node7commons23AllowLocalNativeModulesEvuv_dlopenuv_dlerror_ZN4node7commons19GetGlobalModulePathEvmallocstrrchrfree_ZNSsC1ERKSsjjmemcmpuv_dlsym_ZN4node23FromConstructorTemplateEN2v810PersistentINS0_16FunctionTemplateEEERKNS0_9ArgumentsE_ZN2v816FunctionTemplate11GetFunctionEv_ZNK2v88Function11NewInstanceEiPNS_6HandleINS_5ValueEEE_ZN4node24FromConstructorTemplateXEN2v86HandleINS0_16FunctionTemplateEEERN6jxcore10PArgumentsE_ZN4node18MakeDomainCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_8FunctionEEEiPNS3_INS2_5ValueEEE_ZNK2v85Value8IsObjectEv_ZNK2v85Value6IsTrueEv_ZN4node18MakeDomainCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE_ZN4node22defineProcessCallbacksEPNS_7commonsE_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_8FunctionEEEiPNS3_INS2_5ValueEEE_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEEPKciPNS3_INS2_5ValueEEE_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEEPKciPNS1_INS0_5ValueEEE_ZN4node13ParseEncodingEPKciNS_8encodingE_ZN4node14no_deprecationE_ZN4node13ParseEncodingEN2v86HandleINS0_5ValueEEENS_8encodingE_ZN4node6EncodeEPKvjNS_8encodingE_ZN4node11StringBytes6EncodeEPKcjNS_8encodingE_ZN4node11DecodeBytesEN2v86HandleINS0_5ValueEEENS_8encodingE_ZN4node11StringBytes4SizeEN2v86HandleINS1_5ValueEEENS_8encodingE_ZN4node11DecodeWriteEPcjN2v86HandleINS1_5ValueEEENS_8encodingE_ZN4node11StringBytes5WriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEPi_ZN4node13ExecuteStringEPN6jxcore8JXStringES2__ZN2v86Script7CompileENS_6HandleINS_6StringEEENS1_INS_5ValueEEES3__ZN2v86Script3RunEv_ZN4node15ReportExceptionERN2v88TryCatchEb_ZN4node11EnableDebugEbPNS_7commonsEuv_async_inituv_unref_ZN2v87Isolate5EnterEv_ZN2v85Debug30SetDebugMessageDispatchHandlerEPFvvEb_ZN2v85Debug11EnableAgentEPKcib_ZN2v87Isolate4ExitEv_ZN4node24EnableDebugSignalHandlerEP11uv_signal_si_ZN4node4LoadEN2v86HandleINS0_6ObjectEEEatexit_ZN4node10MainSourceEPNS_7commonsEPN6jxcore8JXStringE_ZN6jxcore8JXStringC1EPKcPv_ZN2v87Context10GetCurrentEv_ZN2v87Context6GlobalEv_ZN4node9RunAtExitEv_ZdlPv_ZN4node6AtExitEPFvPvES0__Znwj_ZN4node8EmitExitEN2v86HandleINS0_6ObjectEEE_ZN4node9EmitResetEN2v86HandleINS0_6ObjectEEEi_ZN4node7commons20self_hosted_process_E_ZN4node9SetMethodIN2v86HandleINS1_6ObjectEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v86String9NewSymbolEPKci_ZN4node18SetupProcessObjectEib_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZNK2v88Function11NewInstanceEv_ZN2v86Object11SetAccessorENS_6HandleINS_6StringEEEPFNS1_INS_5ValueEEENS_5LocalIS2_EERKNS_12AccessorInfoEEPFvS7_NS6_IS4_EESA_ES5_NS_13AccessControlENS_17PropertyAttributeE_ZN4node7commons24embedded_multithreading_E_ZN4node7commons10riThreadIdE_ZN2v82V810GetVersionEvuv_version_string_ZN6jxcore8JXEngine14ActiveInstanceEv_ZN6jxcore8JXEngine21GetInstanceByThreadIdEi_ZN2v814ObjectTemplate3NewEv_ZN2v814ObjectTemplate23SetNamedPropertyHandlerEPFNS_6HandleINS_5ValueEEENS_5LocalINS_6StringEEERKNS_12AccessorInfoEEPFS3_S6_NS4_IS2_EES9_EPFNS1_INS_7IntegerEEES6_S9_EPFNS1_INS_7BooleanEEES6_S9_EPFNS1_INS_5ArrayEEES9_ES3__ZN2v814ObjectTemplate11NewInstanceEvgetpiduv_exepathuv_guess_handle_ZN2v86Object39SetIndexedPropertiesToExternalArrayDataEPvNS_17ExternalArrayTypeEi_ZN4node7commons10setProcessEN2v86HandleINS1_6ObjectEEE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN4node16WRITE_UTF8_FLAGSEpthread_create c de$f,gqh i ijj(kAkV pi illmn&o<hHp_ouhpqr str st c d!e)f1gNodhspqv ipOh{wlxj c d!e)f1gNodhspqvxw;l c de$f,gDoZhfpsqz {|p }+ 9~B cil i l 0 Jinlzp c de'f/gQcpmq c de$f,gDoZhfpsq i|c de%f-g?JqY c de$f,gW_gipqj c de$f,gW_gwpqp c de$f,gNV^juhpqhp  c de'f/gF\hhprqc d"c d c de'f/gDOoehqp{q c de$f,gDoZhfpsqg wp c de'f/gFo\hhprqc d6>CQl c d!e)f1gLobhqpq  .|Xvfwwl2wNwol c de$f,gDoZhfpsqp c de$f,gDoZhfpsqpc d-e5f=gdo}hpq 2Xisp  {|p  8i c de'f/gP I\go}hpqc dgLkhh i;hQjbkunr stc de%f-gC` rx q c d!e)f1gHviwl;v^pkq}c de%f-gQqpq c de$f,gJV^m|q c d"e*f2gfipqc dc d*e2f:giohpq5xV|jxp xIitwl}oh!l3pXox }}n }Saooh  %i:O|jp4o c de$f,gY_g{gohpqo c de/ Ji\n|pqoh .| c de$f,g=oSh_plqr  o c de'f/gR ji||pqoh(G^wo c d"e*f2gMochrpq#[vwl5Uwvl i|o o c de$f,g` si|pqohpK i|#p3Jo 6 o & 0 Booooo hpGodo c de'f/gZe{wpqoh=Hbo i| r i|poo/ogoo c d$e,f4g` {i|pqoh7R i2oLuohpo  '9| c d"e*f2g_ ri|pqoh6*6oLhXproo  | 5iGWo c de'f/gR ji||pqoh=HWk y {|po c d"e*f2g_ ri|pqoh'LW\mv ioo oh+pAO Y k}|oc d-e5f=g|x1jFxcui|p*>Lqjoohpip/;4g} !r~ i|pJt *64br i|' ;Imi45 >Lpi|p4 4B  c d+eohGbpoqc d7eo .IpVqc d3oIhphh(Cljx ij 0iIjr ij1goohc d@ c de;hZvjknqqr stc dOshh)7oMhoho hc d@ c de8oNh[qjhp c d@c d?ijc dg>hV c de$f,gViqc dr" *sr sc de9qpc d0c d!e)=GqZr{ sc d!e)U_qrr s c de$f,gNYtiipq?Go[hyc d- *IWes '{   r     tc d%1rM Usec d/ [:HP_h xh)7F_l v c dQc d' c d!e)f1gJ`hj il ij i#w4Ydpxq c d!e)f1gOUph il ij )iEwsqt c d3Eblc d'e/f7gs| i i U  X6 <![qh ilw il""8NhY til i il  i( Figl~vn il} i0l9 Ti] ~il i il ,i5 Vitlw il#i #iAl[wd il} il i# Gihlq !i "il$i #$iBlK $fio %il &i 'i l8 (R (k ( i ) i l g * i% +C id lr , i - i l % & . v= i` w l / i w l 0 i. lH vl i w l 1 i l ' } O% / 9 RC L (X )a 2 i l * w 3 ilef g9}J`hi 4ilhil)h2 5Minlyh 6ilh 7i:l@ 8H[qh{ 9ilpq :il ;5i> KHv i <il9K+yi =il0piy >il ?i   : DXhh @~il,h Ail3IhY Boil e C  Du E E F G% / H8A xK IT] Bg Jpy o K ? L {  u  < M 9 ! r+ 4= lG PVc Nlr O - P 3 Q R S 0  Ty' U09 ^C VLRb_ Whs}- Xil} Yi0l?.JqYiviwliiwl 0i l'vciwl 1il' (:i >ilI]hm Zilh [il5IhY \oilh ]il3hC ^Yizl  1 (c d /( 021:2 4 h (X #%H'l*-03 6X9<?BEHIKORULX|[^ac0e`hjlo rPux{~Dt \     8 h    0 `     H p    8 ` &4 &@cH!H'H,HfP2Q2l   @x(   `  \ @$@Q  @0h EA @s(0 @H UQ @h}_ @H@N @p B> @p# @h&+ @X)1-- @` ,g @/51 @P2c @5 @hP8% Yi `xe @@;  u @> U; `7 @`Ad    @8`D  J @G *"] 0"Y @`XJ " " @M $] $Y @hpP u% % @SB  ' ' @`xV (w(s @hY(<(8 @@P\z)) @_)) @b3/f/b @ e00= @!h1/1+ @!kZ33 @8"n44 @"q7K7sG @#xtyC<P< @8% w?@H  @X&@z;HCqPCfm @'}EE @(G-G) @P)VJJ  @h*x0T$0T  @,HUUg @(-@_7W@W @h-TZZR @. /B[qP[m @.xQ\!`\+ @/^^R @/ ^^^% @/`C` `R @@0 r`w`s @`0(aa  @00>aa @0HWb&`b" @1PVg g @P1@g"gB @1Jh h @1Hh0 h, @1Hv Qi `i @82 j%!j!! @2P! l!lq! @x3@!l "l" @3:"unb"nb ^" @4 }"n"nI" @4 "9o #@o# @4=#p#p{# @5#r#$r$ @@60$/s$@s: $ @p6p $z%F% @B81%ȓ-% @C=%̓_%Г%Г%Г%Г%%%0(%&l & @ C@|&P#b &node_script.o/ 1560953082 501 20 100644 41876 ` ELFT4(#$ !HINOTUZ[`afglmwy{UWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]ContextNodeScriptcreateContextrunInContextrunInThisContextrunInNewContextbinding:scriptevalmachine.needs a 'context' argument.../src/node_script.ccnode_evalsUWEVuSd$$EE؉$ljE<$$ED$ D$4$D$}ă4$|$EăD$$D$4$L$MEă<$D$Uk1t<$U|$4$EăD$4$EED$ED$ D$EĉD$E$}<$<$<$$ED$ D$4$D$}ă4$|$EăD$$D$4$L$MEă<$D$EjD$ D$4$D$UăD$4$D$UEEă|$4$EEUD$ D$EĉT$$D$ D$4$D$UčML$D$4$UEă|$4$EEUD$ D$EĉT$$D$ D$4$D$UăD$4$UT$UEă|$4$EEUD$ D$EĉT$$D$ D$4$D$UčED$D$4$UMă|$4$MUMD$ T$UĉL$$D$ D$4$L$Uă4$T$EMD$D$4$MMED$ L$<$D$D$ D$4$D$Eă4$D$MED$L$4$EEMD$ D$<$L$D$ D$4$L$Mă4$L$UMD$T$4$MMUD$ L$<$T$D$ D$4$T$Uă4$T$EUD$D$4$UEăUD$ D$<$T$1t<$U|$4$E4$D$D$}Eă|$D$ D$E$E$E$e[^_]Ív&UVSd$t$ nu(l$t$D$F$F$d$[^]UVSd$t$ @Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ @Ft$@Ft2$D$D$F$Ft$d$[^]UVSd$t$ 4$4$d$[^]UVSd$t$ @F t$F @Ft2$D$D$F$Ft$d$[^]UVSd$t$ 4$4$d$[^](function(source, target) { if(!target) target = global; if(Array.isArray(source)){for(var o in source){target[o]=source[o];}return;} Object.getOwnPropertyNames(source).forEach(function(key) { try { var desc = Object.getOwnPropertyDescriptor(source, key); if (desc.value === source) desc.value = target; Object.defineProperty(target, key, desc); } catch (e) { // Catch sealed properties errors } }); })createContext() accept only object as first argument.needs at least 'code' argument.Must be called as a method of Script.'this' must be a result of previous new Script(code) call.UW}VuSd$E4$EЋEE4$$‹tE$D$UЉT$U <$D$ T$4$e[^_]ÍD$ D$E<$UD$EăD$ <$EEL$D$ED$ <$D$EĉD$Eă<$D$EăUt*$UU1&ǂ1UWVSd$ԋE t\1t $Ɖt$}<$U<$T$U1tE4$D$e[^_]u UVSd$u@E FFF EF$D$ D$D$U1t$Fe[^]UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE̍UԋE @$D$Eԃ$EM̉lj$L$U1t$G|$$D$|$D$G$G$EЉ4$D$}BUWVSd$ċ} ttu؉4$1t $D$}ԉ<$Eԃ<$D$Eԃ4$D$M4$Ee[^_]u؉lj4$u UWVuSd$4$} 4$$x WMtMEԉ$Uԃ1t $D$4$M4$Ee[^_]D$Mԉ $UȉMUȃEԅ҉E~]WG$t\GGD$Ẻ$GUăT$ D$UԋEЉT$$EĉD$4$}J}̍D$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ뚐t&Ẻ$EԃGfẺ$EԃUWVSd$|$$t$ G tGd$ [^_]t&l$UWVuSd$4$} 4$$EOP4@MMD$E$EE)x@D$E$EEGP9E$MM $}<$MUEL$T$$MqEPzP tBxR $UUB ED$4$M<$E$4$Ee[^_]t&E$EE&ED$M$Mg9P@ U)ȉ$U{?9WG)Љ$XE$}<$}}<$MUEL$T$$M<$E|$$EE$EfD$ D$ED$E$EE}D$ED$ <$D$E<$D$E<$D$E4$D$M+t&EvE$E$u#vE$UU$:t&E$EbfEU$E!&D$ D$ED$E$ED$E$ED$E$E"UWVuSd$4$} 4$$Wx}ЉUuf t $UčMЉD$L$$Eă4$D$M4$Ee[^_]Eĉ$Uă1t $D$4$U뱍t&EĉEG $D$Eă$E@@MG @1t $G|$$D$|$D$G$G$ED$EЉD$E$UWEVSd$$E4$$EE H@u|$$E P@D$4$EEE xx}@D$4$E E@x9EPz)P tJ1yuBD$4$}<$|$4$E4$D$E UM@T$ L$D$E$Eԉ$EEPzv@ tPz@@ $$D$4$U|$4$UE4$D$E M@L$ MD$EL$$UT$E$ME$<$E$Ee[^_]f4$E t&D$ D$E4$D$E4$D$E4$D$ED$E$Mjt&u4$E`fED$$ED$$4$Evt&D$ D$E4$D$W&}E4$D$ED$E ;x}V@)Љ$tfE ;x@)$tDEvECv4$E$u&'E&E$2D$ D$E4$D$E4$D$E4$D$ED$4$E$n4$E vD$ sUWVuSd$4$} 4$$Ox}ЉMtNEĉ$Uă1t $D$4$M4$Ee[^_]&Uĉ$ D$EЉD$EăUUWEVSd$$u E<$$`ENlP@MMD$E$FEx9pEuԉ$}<$4$EPz@ tPz@@ b$D$E$EtwD$E$M4$<$E$Ee[^_]vE$EE&ED$$S}Et$$ED$E$UeD$ EE $D$ED$FEx9x\;x@)Љ$tk6;~F)$tLEAv4$5vE$E$ E&EvD$ D$ED$E$ED$E$ED$E$E&E$EfE$E$BfD$ [UWVuSd$4$} 4$$Ox}ЉMtNEĉ$Uă1t $D$4$M4$Ee[^_]&Uĉ$ D$EЉD$EăUUWEVSd$$E<$$EE }p9<$EEE xpx@D$<$E E@p9D$ D$D$<$E$$4$EEƉ4$t$<$E<$D$E UM@T$ L$D$E$Eԉ$EEPz@ tPz@{@ $D$<$ULt$<$UE<$D$E M@L$ MD$EL$$UT$E$ME$4$E$Ee[^_]<$Et&ED$$1vH@$E P@D$<$EEE xD$ D$E<$D$f}u:E<$D$ED$t&<$EUt&E$빍v<$EPt&E ;p}F@)Љ$tNE ;p@)$t,Ev<$E$uE&E9vD$ D$E<$D$E<$D$E<$D$ED$t&<$E$j<$E&D$ kUWVuSd$4$} 4$$Ox}ЉMtNEĉ$Uă1t $D$4$M4$Ee[^_]&Uĉ$ D$EЉD$EăUUWEVSd$$E<$$EE HE x@u|$$E P>@D$4$EEE x@D$4$EEE xx@D$4$EEvu4$E|$$MD$ D$E4$D$E4$D$E4$D$ED$E$ME$Ee[^_]t&D$ D$E4$D$EEE E@x9EPzOP tJ1yuBD$4$}<$|$4$E4$D$E UM@T$ L$D$E$Eԉ$EED$ 4$D$ED$ED$4$U|$4$UE4$D$E M@L$ MD$EL$$UT$E$ME$<$It&ED$$}u:E4$D$ED$뚍&4$EPt&E$빍v4$Et&4$Et&uD$ EfE ;x}V@)Љ$tfE ;x}@)$tHE&Ev4$E$u&'EV4$E$t݉4$EvUWVuSd$4$} 4$$Ox}ЉMtNEĉ$Uă1t $D$4$M4$Ee[^_]&Uĉ$ D$EЉD$EăUUWEVSd$$u E<$$ NP@MMD$E$E~Ex@D$E$EEFx9Euԉ$}<$4$UMD$ T$L$E$E%D$E$ED$E$U4$<$E$Ee[^_]vE$EE&9xE@)Љ$69~F)$Euԉ$}<$4$EUMD$ $T$L$Euo4$Et$$Et&E$E-fD$ D$E|$$EED$E$Et4$Et$$ED$E$MRt&uD$ |$D$4$E4$D$E4$D$ED$E$Mt&t&E$E$uCvEuԉ$}<$4$UD$ T$UT$,E$EfE$E$UWVuSd$4$} 4$$Ox}ЉMtNEĉ$Uă1t $D$4$M4$Ee[^_]&Uĉ$ D$EЉD$EăUUWEVSd$$} E4$$8EOdPG@uD$4$EE x@$x@D$4$EExk@D$4$EEEGH9D$ D$D$4$Eh$VU$UE$E$E4$D$E4$D$UM@T$ L$D$E$Eԉ$EED$ 4$D$ED$ED$4$UE4$UD$E4$D$M@L$ MD$EL$$UT$E$ME$E$E$Ee[^_]fu4$Ef}E4$D$ED$D$ D$E4$D$EEEGH9Z;H@M)Љ$MW;H\@)Љ$0E&4$EE)fEt&uD$ED$ 4$D$E4$D$E4$D$ED$E$Mo4$Eet&4$Eot&4$Et&E$REv4$E$u&'EY&4$Et&4$MEXUWVuSd$4$} 4$$Ox}ЉMtNEĉ$Uă1t $D$4$M4$Ee[^_]&Uĉ$ D$EЉD$EăUUVSd$4$t$D$$d$[^] $GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (BAB CxAAA  H-AB AgA 0lfAA AO PA AA0ZAB ED% AAA D 0LAA AO vA AA$lAB BdAA $0~AB BvAA $X0AB BhAA $AB B}AA $0AB BhAA 0YAB ADDz AAA G ,AB Cn AAA A $4~AB BvAA ,\&AB BDn AAA F ,AB C~ AAA I ,AB BD{ AAA I <CAA AAO X AC AAG 0,1AB BD} AAA G ,`AB BD AAA I 0AB ECU AAA E ,AB BDz AAA J 0cAB EC< AAA F ,(AB BDz AAA J 0XAB ECA AAA I ,AB BDz AAA J 0AB EC AAA G ,AB BDz AAA J 0  AB EC\ AAA F ,TAB BDz AAA J 0AB EC AAA E ,AB BDz AAA J $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.rel.text._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely._ZN4node10ObjectWrap3RefEv.rel.text._ZN4node10ObjectWrap3RefEv.text.unlikely._ZN4node10ObjectWrapD2Ev.rel.text._ZN4node10ObjectWrapD2Ev.rodata.str1.1.text.unlikely._ZN4node9InitEvalsEN2v86HandleINS0_6ObjectEEE.rel.text._ZN4node9InitEvalsEN2v86HandleINS0_6ObjectEEE.text.unlikely._ZN4node10ObjectWrap5UnrefEv.rel.text._ZN4node10ObjectWrap5UnrefEv.text.unlikely._ZN4node10ObjectWrapD0Ev.rel.text._ZN4node10ObjectWrapD0Ev.text.unlikely._ZN4node14WrappedContextD2Ev.rel.text._ZN4node14WrappedContextD2Ev.text.unlikely._ZN4node14WrappedContextD0Ev.rel.text._ZN4node14WrappedContextD0Ev.text.unlikely._ZN4node13WrappedScriptD2Ev.rel.text._ZN4node13WrappedScriptD2Ev.text.unlikely._ZN4node13WrappedScriptD0Ev.rel.text._ZN4node13WrappedScriptD0Ev.rodata.str1.4.text.unlikely._ZN4node11CloneObjectEPN2v87IsolateENS0_6HandleINS0_6ObjectEEENS3_INS0_5ValueEEES7_.rel.text._ZN4node11CloneObjectEPN2v87IsolateENS0_6HandleINS0_6ObjectEEENS3_INS0_5ValueEEES7_.text.unlikely._ZN4node14WrappedContext10InstanceOfEN2v86HandleINS1_5ValueEEEPNS_7commonsE.rel.text._ZN4node14WrappedContext10InstanceOfEN2v86HandleINS1_5ValueEEEPNS_7commonsE.text.unlikely._ZN4node14WrappedContextC2EPNS_7commonsE.rel.text._ZN4node14WrappedContextC2EPNS_7commonsE.text.unlikely._ZN4node14WrappedContext3NewERKN2v89ArgumentsE.rel.text._ZN4node14WrappedContext3NewERKN2v89ArgumentsE.text.unlikely._ZN4node14WrappedContext11NewInstanceEPNS_7commonsE.rel.text._ZN4node14WrappedContext11NewInstanceEPNS_7commonsE.text.unlikely._ZN4node13WrappedScript13CreateContextERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript13CreateContextERKN2v89ArgumentsE.text.unlikely._ZN4node14WrappedContext12GetV8ContextEv.rel.text._ZN4node14WrappedContext12GetV8ContextEv.text.unlikely._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE1EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.rel.text._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE1EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.text.unlikely._ZN4node13WrappedScript3NewERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript3NewERKN2v89ArgumentsE.text.unlikely._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.rel.text._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.text.unlikely._ZN4node13WrappedScript12RunInContextERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript12RunInContextERKN2v89ArgumentsE.text.unlikely._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.rel.text._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.text.unlikely._ZN4node13WrappedScript16RunInThisContextERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript16RunInThisContextERKN2v89ArgumentsE.text.unlikely._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.rel.text._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.text.unlikely._ZN4node13WrappedScript15RunInNewContextERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript15RunInNewContextERKN2v89ArgumentsE.text.unlikely._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.rel.text._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.text.unlikely._ZN4node13WrappedScript19CompileRunInContextERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript19CompileRunInContextERKN2v89ArgumentsE.text.unlikely._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.rel.text._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.text.unlikely._ZN4node13WrappedScript23CompileRunInThisContextERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript23CompileRunInThisContextERKN2v89ArgumentsE.text.unlikely._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.rel.text._ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE.text.unlikely._ZN4node13WrappedScript22CompileRunInNewContextERKN2v89ArgumentsE.rel.text._ZN4node13WrappedScript22CompileRunInNewContextERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_node_script.cc.rel.text.startup._GLOBAL__sub_I_node_script.cc.rel.init_array.rel.data.rel.ro._ZTVN4node10ObjectWrapE.rel.data.rel.ro._ZTVN4node14WrappedContextE.rel.data.rel.ro._ZTVN4node13WrappedScriptE.rel.data.rel.node_evals_module.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group !#$&')*,-/0234679:<=?@BCEFHIKLNOQRTUWXZ[]^`acdfgijlmoprsFs.uwy{}=BGL!Q.V?[Oa2g2m^s2y2v2     B",D-"_f"!wf"1Z_&=;h*RLC+RX^.dmjpL"!,{l"$~'!y~'#0*@-\!{w-00Y4 ; |    7C c   ~: M ~:v     @ ) ]  CF 1"Ij     1b|r"O'?]c"U"["a "g"m7O\t}node_script.cc_GLOBAL__sub_I_node_script.cc_ZStL8__ioinit.LC3.LC4.LC5.LC6.LC7.LC8.LC16.LC17.LC23.LC27.LC26.LC28.LC31.LC32_ZN4node10ObjectWrapD5Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN4node9InitEvalsEN2v86HandleINS0_6ObjectEEE_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node14WrappedContext3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN4node13WrappedScript3NewERKN2v89ArgumentsE_ZN4node13WrappedScript13CreateContextERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node13WrappedScript12RunInContextERKN2v89ArgumentsE_ZN4node13WrappedScript16RunInThisContextERKN2v89ArgumentsE_ZN4node13WrappedScript15RunInNewContextERKN2v89ArgumentsE_ZN4node13WrappedScript19CompileRunInContextERKN2v89ArgumentsE_ZN4node13WrappedScript23CompileRunInThisContextERKN2v89ArgumentsE_ZN4node13WrappedScript22CompileRunInNewContextERKN2v89ArgumentsE_ZN2v87Isolate10GetCurrentEv_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD0Ev_ZdlPv_ZN4node14WrappedContextD2Ev_ZTVN4node14WrappedContextE_ZN4node14WrappedContextD1Ev_ZN4node14WrappedContextD0Ev_ZN4node13WrappedScriptD2Ev_ZTVN4node13WrappedScriptE_ZN4node13WrappedScriptD1Ev_ZN4node13WrappedScriptD0Ev_ZN4node11CloneObjectEPN2v87IsolateENS0_6HandleINS0_6ObjectEEENS3_INS0_5ValueEEES7__ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Script7CompileENS_6HandleINS_6StringEEENS1_INS_5ValueEEES3__ZN2v86Script3RunEv_ZN4node14WrappedContext10InstanceOfEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZNK2v88Function11NewInstanceEv_ZN2v816FunctionTemplate11HasInstanceENS_6HandleINS_5ValueEEE_ZN4node7commons11getInstanceEv_ZN4node14WrappedContextC2EPNS_7commonsE_ZN2v87Context3NewEPNS_22ExtensionConfigurationENS_6HandleINS_14ObjectTemplateEEENS3_INS_5ValueEEE_ZN4node14WrappedContextC1EPNS_7commonsE_ZN2v89UndefinedEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZNK2v85Value8ToObjectEv_Znwj_ZN4node14WrappedContext11NewInstanceEPNS_7commonsE_ZNK2v85Value8IsObjectEv_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN4node14WrappedContext12GetV8ContextEv_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE1EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZNK2v85Value8ToStringEv_ZN2v87Context10GetCurrentEv_ZN2v87Context5EnterEv_ZN2v88TryCatchC1Ev_ZN2v86Script3NewENS_6HandleINS_6StringEEENS1_INS_5ValueEEE_ZN2v88TryCatchD1Ev_ZN2v87Context4ExitEv_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZNK2v85Value9IsBooleanEv_ZNK2v85Value12BooleanValueEv_ZN4node20DisplayExceptionLineERN2v88TryCatchE_ZN2v88TryCatch7ReThrowEv_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN4node24FromConstructorTemplateXEN2v86HandleINS0_16FunctionTemplateEEERN6jxcore10PArgumentsE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN2v87Context6GlobalEv_ZN2v86Object12GetPrototypeEv_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE1ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN2v86Object3NewEv_ZN2v811HandleScope12CreateHandleEPNS_8internal10HeapObjectE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE2ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE0ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZN4node13WrappedScript11EvalMachineILNS0_14EvalInputFlagsE0ELNS0_16EvalContextFlagsE1ELNS0_15EvalOutputFlagsE0EEEN2v86HandleINS5_5ValueEEERN6jxcore10PArgumentsENS6_INS5_6ObjectEEE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_evals_moduler s!t5ur s"wr sy0wKzZ{ r s"t2t:~BKgy R 0;uCtK~S\x S T"7[a} U V$9]c W2SYu=C_qu)u9Qr sq5@r sy.wIzX{`r s.{4yHwczr{r s$r s.{;yOwjzy{r s$ r s+t3~;Qs~u X Y %r s.?Qlyr s\p r st$~,=S_luzq r s#t9HZlyut r st'~/J`lyu0 ZK]or s= r st'~/pF[hs{u/CKdz [ \,>Qgu ] " r st'~/\ru !>Uz[qny r s!t)~1f);ft 2BJUul ^'4R [e GZ ]m _ r st'~/I_kxu r s$t,~4u)1<uZ [<Tgu ]/=Z _ r st'~/I_kxu r s!t)~1[{ 'R` .6Au\ [!<Wd ]-?Qlz _ r st'~/I_kxu r s!t)~1v)? ^Rdvu [!/;Mx*:B_y \"@Ylz r st'~/I_kxu r s$t,~4r<IQ\uz#5D_z [ \'9Naw r st'~/I_kxu r s$t,~4o.D[i{t#5]ou [Jt \$<Toy r st'~/I_kxur s N( 2:F| v v v } Lp   4\8 `"$&(0*d,.02,4\68:<$>X@BDFO4 q@ vL`` l x      yr!',B @y "0- @y^H`fD @y0g2vyZ @yL @t|(!>, j0 lf @|8$  ~ @|@'   0 @} */P ^P Z @4}@-  0 @t} 02 O_ G` YC @}x4 @ ~@7RNP~ @L~(:& @t~=4{w @X@ @\C@n|pCx @Fs1o @`I. o k @tL k g @O& q m @PR Hw Pcs @U2 " "} @PX x## @d[F4(@( @P^() @4aX-- @Pd..  @pgr22 @tPjX3`3 @ĊmN8P8 @DPp19b9F^ @8sX9 @̌u`9 @Ԍ wx9 @ y9 @ {$9  @4}@9T9p09(y99  @L@WP q dstring_bytes.o/ 1560953081 501 20 100644 17612 ` ELF4<4(74/UWEVSd$$u}EE$$<E1tE$lj|$uĉ4$Eă$|$4$EEă$} ;E uGNj}p1uauLƋE$e[^_]Ðt&}Eĉ$|$Uăt&뫍&ftލT$Ẻ$D$E<$uU F=~1}QʍyЉ}PzЉ wb0}T}ʈ7;u ;;u/JЀ vJPyɉ}zЉ vz7뎍t&E D$D$D$ E$D$u{}Ɖqv$D$ED$ E D$ED$>UẺ$ƉEUD$4$T$4$}Mlj}M 9M9My}y}}}0U4)‰Ut$9Ew ftm09E4wU=HpUt69Mw/&t&m19M4w܉ƉЃ}%=UqE0UU ЋU;UIȋ t%9uw vtm9uȋ w}P<=HUFM<UU ыUJ;Uvʋ t+9Ew $m09E4wΉу}=UE?u 9EVv 9u1U+U֋MEt&E D$D$D$ E$D$Mt}4E U} ?G$UNjE D$D$|$$D$ t&U 1tU t&9E v G 9wMtE0<$t&Ezʍy}t&zvFEt}6E$&u]uftt&WRƉUt&Ή8t&U+UZvWPvfO1K11'1UWVSd$ċ|$Xt$ 4$4$$D$<$T$`D$D$\|$T$D$ D$TD$D$P$4$d$<[^_]USd$|$$t d$[]Ít&D$ l$$d$[]UW}VSd$ċu<$tE Ut1} wSE t&։<$e[^_]fMEԉ$L$Eԃ$} v1t&4R뷍v @tu1t1t댍4뇍vMEԉ$L$Eԃ$]UWVSd$ԋ|$@t$4$4$$D$<$<$D$D$DD$ D$4$d$,[^_]UW}VSd$u<$tE 0EtQ} wqM t&UEĉ$T$Eă$Ɖ<$e[^_]Ít&UEĉ$T$Eă$} v1fMEĉ$L$EăD$D$Ẻ$ƉEUЉ4$1UUt=|=Jts@tyu1tҍt&'E$4UEĉ$T$Eă$t<=EzUWVSd$ԋ|$@t$4$4$$D$<$<$D$D$DD$ D$4$d$,[^_]UWEVSd$$uE<$$^EMuu t&Eԉ$EԃD$Ẻ$uẺ$Ee[^_]vuEԉ$t$ u t$ut$Eԃ멋EPt~xvu~xku M)ʉ򐍴&uH9uȃ)<x.|xu|jv'E$91F9E sE 9E1fo1HEE o f 9wE;EU UP9UU TUTP9UU TUTP9UiU TUTP9UKU TUTP9U-U TUTP9UU TUTP9UU TUTP9UU TUTP 9UU T UT P 9UU T UT P 9UyU T UT P 9U[U T UT P 9U=U T UT P9UU TT v$t&U} M|E1E MD1D1=D1E U}D7=D7=7D7fMu t&} t&'fH9ufEuEЋE M}Ѓ9ƒ9E O FG1foEE1M oMf;UrM9tSE UMȋU%ȃ9v3U MUMȃ9vE UE%}Љ:E )׋M8EЃ9E D8ED9E D8D9)‹E Et"E @EFu E @FU EE)EE M<Q9u.M } MP9u81"UVSd$4$t$D$$d$[^]0123456789abcdefABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/>>?456789:;<= ? !"#$%&'()*+,-./0123$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,AB F AAA F (LAB C{AAA 4xHAF O K  AAE T DD,AB AEa AAA C (uAB CkAAA , AB AE AAA E (<uAB CkAAA ,h_ AB EC AAA F $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node11StringBytes7JXWriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEbPi.rel.text._ZN4node11StringBytes7JXWriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEbPi.rel.rodata._ZN4node11StringBytes7JXWriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEbPi.text.unlikely._ZN4node11StringBytes5WriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEPi.rel.text._ZN4node11StringBytes5WriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEPi.text.unlikely._ZN4node11StringBytes13IsValidStringEN2v86HandleINS1_6StringEEENS_8encodingE.rel.text._ZN4node11StringBytes13IsValidStringEN2v86HandleINS1_6StringEEENS_8encodingE.text.unlikely._ZN4node11StringBytes13JXStorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj.rel.text._ZN4node11StringBytes13JXStorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj.rel.rodata._ZN4node11StringBytes13JXStorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj.text.unlikely._ZN4node11StringBytes11StorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingE.rel.text._ZN4node11StringBytes11StorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingE.text.unlikely._ZN4node11StringBytes6JXSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj.rel.text._ZN4node11StringBytes6JXSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj.rel.rodata._ZN4node11StringBytes6JXSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj.text.unlikely._ZN4node11StringBytes4SizeEN2v86HandleINS1_5ValueEEENS_8encodingE.rel.text._ZN4node11StringBytes4SizeEN2v86HandleINS1_5ValueEEENS_8encodingE.text.unlikely._ZN4node11StringBytes6EncodeEPKcjNS_8encodingE.rel.text._ZN4node11StringBytes6EncodeEPKcjNS_8encodingE.rel.rodata._ZN4node11StringBytes6EncodeEPKcjNS_8encodingE.text.unlikely._GLOBAL__sub_I_string_bytes.cc.rel.text.startup._GLOBAL__sub_I_string_bytes.cc.rel.init_array.rodata._ZZN4nodeL10hex_encodeEPKcjPcjE3hex.rodata._ZZN4nodeL13base64_encodeEPKcjPcjE5table.rodata._ZN4nodeL14unbase64_tableE.bss._ZStL8__ioinit.rodata.cst16.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group,    !#,A+U*%&yF&-(*+,-./1!2(hPHZXxX`. .!!!#H!)(!/!05/Ib9Qr%,Da H<Tu2Ou_ ! .Rxstring_bytes.cc_ZN4nodeL14unbase64_tableE_ZZN4nodeL13base64_encodeEPKcjPcjE5table_ZZN4nodeL10hex_encodeEPKcjPcjE3hex_GLOBAL__sub_I_string_bytes.cc_ZStL8__ioinit.L252.L11.L13.L14.L15.L16.L17.L203.L186.L187.L188.L189.L237.L215.L216.L217.L218.LC7.LC8.L250.L253.L254.L255.L256.L257_ZN4node11StringBytes7JXWriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEbPi__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZNK2v85Value8ToObjectEv_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN2v811HandleScopeD1Ev_ZNK2v85Value8ToStringEv_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEv_ZNK2v86String10WriteAsciiEPciii_ZN4node16WRITE_UTF8_FLAGSE_ZNK2v86String9WriteUtf8EPciPii_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZNK2v86String5WriteEPtiii_Znaj_ZdaPv_ZN6jxcore8JXStringD1Ev_ZN2v87Isolate10GetCurrentEv_ZN4node11StringBytes5WriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEPi_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN4node11StringBytes13IsValidStringEN2v86HandleINS1_6StringEEENS_8encodingE_ZNK2v86String6LengthEv_ZN4node11StringBytes13JXStorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZN4node11StringBytes11StorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingE_ZN4node11StringBytes6JXSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZNK2v86String10Utf8LengthEv_ZN4node11StringBytes4SizeEN2v86HandleINS1_5ValueEEENS_8encodingE_ZN4node11StringBytes6EncodeEPKcjNS_8encodingE_ZN2v86String5EmptyEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86String3NewEPNS_7IsolateEPKti_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit E F%G0H8InJKLKMNO `PkQJRjSTUVQ #2WkXWY(Z[ * + , - . / .E F!G)H1I=]lDvNE F4_ E FGK `N~O_KM 0 1 2 3 0 4 0E F!G)H1I=]\`fN E FGK fOtc~NO_OPQWZvKM 5 6 7 8 5 9 5E F!G)H1I=]\bfN E F$G,H4Ic wfgNhX' "h Y6i^Xi6XB !hYjK'X[WX : X " " "& ". " ; < ( = > ? @ AE F $k( l2m:n P | @l&45E<!<'<,<@ @<75 @88524@ @T8@5 ;H7 @85  @8H5G C @885< @ u @,9@5J   @l9x5h  @985A  u @:@5   _  @\:5!YU @l;85#F @;85& @;5(+A@\@ 0( @;P52 (6D x//96 1560953081 501 20 100644 7104 ` ELFH4(# UWVSd$D$(t$ |$$FF t? tt )ЉFFFFd$ [^_]Ívl$UVSd$t$ ~u d$[^]Ít&l$uF t$F Ftʉ$d$[^]slab_%pUWVS$u<$t$ $D$D$FFFD$ T$ $D$1t$F <$e[^_]Ðt&_UWEVSd$u$EXEE4~F $E~9}tM}ĉD$<$L$EăEԋ1t $D$<$EԉD$ Eĉ<$D$D$EuĉD$E t$$<$t$Eă$NjE$e[^_]ËFt UV9+$~FtM}ĉD$<$L$EăEԋ1t $D$<$EԉD$ ED$<$D$Uă1t$FFFD$<$EUĉD$E T$U$U<$T$Eă$V<U~V&E t&4$v}u1vEUWVuSd$ĉ4$E #E @ $E̋M̍EԋU$L$T$EMԃ?G(MtEЉ$Eԃt $D$ẺD$E$EȉD$EЉ$E U}9Pt=|$4$M4$Ee[^_]&EBt&@EЉ|$$Eԃ$U)‹EtЋU BUVSd$4$t$D$$d$[^]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| <}AA AAO U AA AAD @\bAA AO N A AAE vA AA,AB AH AAA F ,AB F# AAA A ,\AB BD AAA J $0FAB B~AA X.symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node13SlabAllocatorC2EjPNS_7commonsE.rel.text._ZN4node13SlabAllocatorC2EjPNS_7commonsE.text.unlikely._ZN4node13SlabAllocatorD2Ev.rel.text._ZN4node13SlabAllocatorD2Ev.rodata.str1.1.text.unlikely._ZN4node13SlabAllocator10InitializeEv.rel.text._ZN4node13SlabAllocator10InitializeEv.text.unlikely._ZN4node13SlabAllocator8AllocateEN2v86HandleINS1_6ObjectEEEj.rel.text._ZN4node13SlabAllocator8AllocateEN2v86HandleINS1_6ObjectEEEj.text.unlikely._ZN4node13SlabAllocator6ShrinkEN2v86HandleINS1_6ObjectEEEPcj.rel.text._ZN4node13SlabAllocator6ShrinkEN2v86HandleINS1_6ObjectEEEPcj.text.unlikely._GLOBAL__sub_I_slab_allocator.cc.rel.text.startup._GLOBAL__sub_I_slab_allocator.cc.rel.init_array.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    F4C H}q}b Eb a 6s 2j\?vslab_allocator.cc_GLOBAL__sub_I_slab_allocator.cc_ZStL8__ioinit.LC2_ZN4node13SlabAllocatorC2EjPNS_7commonsE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN4node7commons11getInstanceEv_ZN4node13SlabAllocatorC1EjPNS_7commonsE_ZN4node13SlabAllocatorD2Ev_ZN2v82V86IsDeadEv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node13SlabAllocatorD1Ev_ZN4node13SlabAllocator10InitializeEv_ZN2v811HandleScopeC1Evsnprintf_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v811HandleScopeD1Ev_ZN2v87Isolate10GetCurrentEv_ZN4node13SlabAllocator8AllocateEN2v86HandleINS1_6ObjectEEEj_ZN2v811HandleScope12CreateHandleEPNS_8internal10HeapObjectE_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v816FunctionTemplate11GetFunctionEv_ZNK2v88Function11NewInstanceEiPNS_6HandleINS_5ValueEEE_ZN2v86Object14SetHiddenValueENS_6HandleINS_6StringEEENS1_INS_5ValueEEE_ZNK2v85Value8ToObjectEv_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN4node13SlabAllocator6ShrinkEN2v86HandleINS1_6ObjectEEEPcj_ZN2v86Object14GetHiddenValueENS_6HandleINS_6StringEEE_ZN2v84NullEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit u -"@#V#  %&G e'()*+  "&_-./01234"*I#v./01)32#314d%+  &G-f67/238*"304Q+  9( :2;:< `  4\L4!<!<'<,<h@}d @!b @0(! 2"*00, @XH! \ @!?\; @`p! F @8!X @!\ \%0`(.Bh> @8!SD " /114 1560953081 501 20 100644 13436 ` ELF<)4(HE ;=@UWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]USd$D$ $d$[]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]UWVSd$E@EE؉$ljE<$$ Uuĉ4$ET$EEEUă4$ŰUT$EUĉ4$D$E UЉD$Eă} EtrE@4$D$Eĉ4$T$EŰET$Uĉ|$4$D$D$T$ E$e[^_]ÍvMEQ R $T$EU$T$\vUVSd$t$ nu(l$t$D$F$F$d$[^]UVSd$t$ @Ft2$D$D$F$Ft$4$d$[^]UWVSd$䋃t$0@FF$(F $|$F pd$[^_]UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$U4$Ee[^_]vE Uԋ@$D$Eԃ$E$M1t $G$|$D$|$D$G$G$EЉ4$D$MLUWVuSd$4$4$$xtJEĉ$Uă1t $D$4$M4$Ee[^_]vE PJyD$ $ǍẺ$EE @E MĉM@D$ED$$E xE @E$EE xE @$E}E$MD$L$ D$G $<$PE$E$Uă1t $D$4$}vB P1zxt&Eĉ$EEă&E$EăfE$EăfG $UVSd$t$ F $tF $4$P d$[^]onstopUWVuSd$4$4$$‹E z8}tNEԉ$Uԃ1t $D$4$M4$Ee[^_]&HyD$ $UŰH}ԉ<$UĉL$EL$MЋED$ <$L$EUăMԋẺT$D$L$ D$<$D$Eȃ$<$Uԃ1t $D$4$}vA >Hyu @-t& UVSd$t$ @4$D$F $@Ft2$D$D$F$Ft$d$[^]UVSd$t$ 4$4$d$[^]UVSd$4$t$D$$d$[^]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (BAB CxAAA  H-AB AgA  l&AB A`A 0fAA AO PA AA,uAB C# AAA D 0LAA AO vA AA$(lAB BdAA (PcAB CYAAA ,|AB BDn AAA F ,8AB BDn AAA F $BAB BzAA ,AB BDz AAA J $4AB BAA $\0AB BhAA $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.rel.text._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely._ZN4node10ObjectWrap3RefEv.rel.text._ZN4node10ObjectWrap3RefEv.text.unlikely._ZN4nodeL6DeleteEP11uv_handle_s.rel.text._ZN4nodeL6DeleteEP11uv_handle_s.text.unlikely._ZN4node10ObjectWrapD2Ev.rel.text._ZN4node10ObjectWrapD2Ev.text.unlikely._ZN4node11StatWatcher8CallbackEP12uv_fs_poll_siPK4statS5_.rel.text._ZN4node11StatWatcher8CallbackEP12uv_fs_poll_siPK4statS5_.text.unlikely._ZN4node10ObjectWrap5UnrefEv.rel.text._ZN4node10ObjectWrap5UnrefEv.text.unlikely._ZN4node10ObjectWrapD0Ev.rel.text._ZN4node10ObjectWrapD0Ev.text.unlikely._ZN4node11StatWatcherC2Ev.rel.text._ZN4node11StatWatcherC2Ev.text.unlikely._ZN4node11StatWatcher3NewERKN2v89ArgumentsE.rel.text._ZN4node11StatWatcher3NewERKN2v89ArgumentsE.text.unlikely._ZN4node11StatWatcher5StartERKN2v89ArgumentsE.rel.text._ZN4node11StatWatcher5StartERKN2v89ArgumentsE.text.unlikely._ZN4node11StatWatcher4StopEv.rel.text._ZN4node11StatWatcher4StopEv.rodata.str1.1.text.unlikely._ZN4node11StatWatcher4StopERKN2v89ArgumentsE.rel.text._ZN4node11StatWatcher4StopERKN2v89ArgumentsE.text.unlikely._ZN4node11StatWatcherD2Ev.rel.text._ZN4node11StatWatcherD2Ev.text.unlikely._ZN4node11StatWatcherD0Ev.rel.text._ZN4node11StatWatcherD0Ev.text.unlikely._GLOBAL__sub_I_node_stat_watcher.cc.rel.text.startup._GLOBAL__sub_I_node_stat_watcher.cc.rel.init_array.rel.data.rel.ro._ZTVN4node10ObjectWrapE.rel.data.rel.ro._ZTVN4node11StatWatcherE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group    & !#$&')*,-.0134676F7Z?9;=?@BCi,oAB" @(-"Cnuf"!;f"uVyL"3el"~c!!=c!$/Bz8'BZB*:GW.1104$<node_stat_watcher.cc_ZN4nodeL6DeleteEP11uv_handle_s_GLOBAL__sub_I_node_stat_watcher.cc_ZStL8__ioinit.LC11_ZN4node10ObjectWrapD5Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZdlPv_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN4node11StatWatcher8CallbackEP12uv_fs_poll_siPK4statS5__ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN4node16BuildStatsObjectEPK4stat_ZN2v87Integer3NewEiPNS_7IsolateE_ZNK2v85Value8ToObjectEv_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEEuv_last_error_ZN4node8SetErrnoE8uv_err_s_ZN2v87Isolate10GetCurrentEv_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD0Ev_ZN4node11StatWatcherC2Ev_ZTVN4node11StatWatcherE_Znwj_ZN4node7commons13getThreadLoopEvuv_fs_poll_init_ZN4node11StatWatcherC1Ev_ZN4node11StatWatcher3NewERKN2v89ArgumentsE_ZN2v89UndefinedEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN4node11StatWatcher5StartERKN2v89ArgumentsE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZNK2v85Value12BooleanValueEv_ZNK2v85Value11Uint32ValueEv_ZN6jxcore8JXStringdeEvuv_fs_poll_start_ZN6jxcore8JXStringD1Evuv_unref_ZN4node11StatWatcher4StopEvuv_is_activeuv_fs_poll_stop_ZN4node11StatWatcher4StopERKN2v89ArgumentsE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN4node11StatWatcherD2Evuv_close_ZN4node11StatWatcherD1Ev_ZN4node11StatWatcherD0Ev_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit9 :!;5<9 :">9 :?9 :A0>KBZC9 :*;2F:GtHHIJKL!<DMYNiO9 :85Q@R9 :A.>IBXC`?9 :U:VDWPX 9 :;$F,G=[S\_]l<JVY^B8QR] 9 :;$F,G=[S\_]l<`abc'd?eLE_frg}[\][[[/h9 :j.k 9 :;$F,GI[_\k]x<`J .m'L5i=[S\_]9 :U'i- <oBAV>qBC9 :p$?9 : *r( s2t:u$D S=Pp q=P Lp  ,T8 `"$+4 F8@ F=LF/` FPlFAtFU|F9!',B @<$ F - @\$F O&K @t$Fu6@f @$0F u  @$xFM&}0Ly @4%(F|l @\%8Fc @%0F!8Tw`s @%F$|8 @T&F'NBJ @' F*q2  @<'F.    @'PF1@< m@ 0i @( F4p p F @<(8F7  @t(F9   @|( F;3 / @( F=Y m 0 (   @(FC `G8 Inode_crypto.o/ 1560953088 501 20 100644 484276 ` ELF4(XUTUWXZ[ij    "#%&()+,124578=>@ACDLMOPRSXYdeghjkmnpqstvwyz|}(*,.02468:<PUWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]UWVSd$ԍt$4$D$@D$$T$LxL@L4$d$,[^_]USd$D$ t $l$d$[]USd$D$ t $l$d$[]UWVuSd$4$} 4$$EED$$D$<$E=($EUD$$T$ẺUE<$ẺD$HED$G<$}ĉD$@<$D$EăUMEЋET$D$ D$ $D$@<$D$EăEԋE<$D$MEċQ<$ET$ED$UЉ<$D$ EĉT$D$ED$4$e1[^_]UVSd$t$ t tF0D$F4$t t d$[^]ÍvFd$[^]ÐFd$[^]UWVSd$E$)}؉<$<$$Mуt7D$E$4$1<$e[^_]Ít&RREUD$$D$UUMЉ$MMD$4$L$UE$EyEUĉ$UD$Eă$UEE$D$Eă$MD$4$L$뛐t&1#http/1.1identitykeySSL_CTX_new() failed.SSL_new() failed.Not a bufferUnknown groupNo group name givenInitialization failedFailed to generate EC_KEYNot initializedKey generation failedBad parameterFailed to get ECDH public keyFailed to get public keyInvalid keySupplied key is too smallSupplied key is too largeSignFinal errorUnable to load BIOBad passwordUnknown message digest %s SignInit errorVerifyInit errorBad argumenthmac errorFailed to compute ECDH keyPEM_read_bio_PrivateKeyDecipherInit errorMust give cipher-type, keyNot a string or bufferBad input stringDigest method not supportedSignUpdate failHmacUpdate failHashUpdate failVerifyUpdate failSSLv2_methodSSLv2 methods disabledSSLv2_server_methodSSLv2_client_methodSSLv3_methodSSLv3 methods disabledSSLv3_server_methodSSLv3_client_methodTLSv1_methodTLSv1 methods disabledTLSv1_server_methodTLSv1_client_methodTLSv1_1_methodTLSv1_1_server_methodTLSv1_1_client_methodTLSv1_2_methodTLSv1_2_server_methodTLSv1_2_client_methodSSLv23_methodSSLv23_server_methodSSLv23_client_methodUnknown methodDecipherInitIv errorSSL_CTX_use_certificate_chainerrorZERO_RETURNUNABLE_TO_GET_ISSUER_CERTUNABLE_TO_GET_CRLCERT_SIGNATURE_FAILURECRL_SIGNATURE_FAILURECERT_NOT_YET_VALIDCERT_HAS_EXPIREDCRL_NOT_YET_VALIDCRL_HAS_EXPIREDERROR_IN_CERT_NOT_AFTER_FIELDOUT_OF_MEMDEPTH_ZERO_SELF_SIGNED_CERTSELF_SIGNED_CERT_IN_CHAINCERT_CHAIN_TOO_LONGCERT_REVOKEDINVALID_CAPATH_LENGTH_EXCEEDEDINVALID_PURPOSECERT_UNTRUSTEDCERT_REJECTEDnameversionsubjectissuersubjectaltnamevalid_fromvalid_tofingerprintext_key_usagemodulusexponentSSL_set_session errorpskIdentityonselectSSL_accept:StartSSL_connect:StartsentShutdownreceivedShutdownBIO_writeTakes 3 parametersoff + len > buffer.lengthSSL_accept:ClearOutSSL_connect:ClearOutSSL_read:ClearOutBIO_read:EncOutSSL_accept:ClearInSSL_connect:ClearInSSL_write:ClearInSSL_shutdownPBKDF2 errorBad saltBad key lengthKey length not a numberBad iterationsIterations not a numberondonesize > Buffer::kMaxLengthjxcore-logSecureContextinitsetKeysetCertaddCACertaddCRLaddRootCertssetCipherssetOptionssetSessionIdContextcloseloadPKCS12setPskHintsetPskServerCallbackConnectionencInclearOutclearInencOutclearPendingencPendinggetPeerCertificategetSessionsetSessionloadSessionisSessionReusedisInitFinishedverifyErrorgetCurrentCipherstartshutdowngetNegotiatedProtocolsetNPNProtocolsgetServernamesetSNICallbacksetPskClientCallbackCipherinitivupdatesetAutoPaddingfinalDecipherfinaltolDiffieHellmanDiffieHellmanGroupgenerateKeyscomputeSecretgetPrimegetGeneratorgetPublicKeygetPrivateKeysetPublicKeysetPrivateKeyECDHHmacdigestHashSignsignVerifyverifyPBKDF2randomBytespseudoRandomBytesgetSSLCiphersgetCiphersgetHashespublicEncryptprivateDecryptnode_cryptomodp1modp2modp5modp14modp15modp16modp17modp18UWVSd$ԋED$$@ taD$u4$}4$|$E$U |$4$E$Me[1^_]Ít&U Ee[1^_]UWVSd$t$<|$4ty4$l$(9GNj|$0s=1uu d$[^_]d$[^_]ftލu@u 몍&d$1[^_]Ðt&vfO΍vWPUWVSd$>Euԉ$$D$U |$D$ 4$T$EEUԃ4$UUԃ4$T$UT$UԋED$ T$@4$D$}ԃ<$1҄u e[^_]Ð|$4$}ԃ4$|$Eԃ$9Ese1[^_]Ív|$4$EEԃ$UЉƋ}s<1ɨu&{oft&f͍vuuvGBvfOUW}VSd$ED$$<$<$$EċFt$FF aD$Mԉ $MUԃMЉT$ $UEԃ$UȋMЉẺT$ $Eԃ$D$EM̉D$ EL$D$ED$E $t^t!<$e1[^_]Í&EЉ$Eԃ$}$F믋ED$ E D$EĉD$EЉ$Uԃ1tʉ$t&UĉЃ(:tEЉ$Eԃ{v'1뇍t&U EE:&EQUWVSd$.EEuD$$ENjE E D$ 4$D$ED$EăEЋG Eԉ$E4$Eă4$D$EЉD$ED$ D$G 4$D$E}ĉ$tTE$1ҋEU$Ue[^_]Ít&HyZ@ L1Ӑ<$tE|$4$D$ED$ 4$D$}Eă|$4$D$D$EUD$ 4$D$UEă|$4$D$U}ċƒ@@<$ED$ D$D$$UD$ED$D$D$ T$$|$4$}ă4$|$Eă$9EU|$4$EEă$UƋ}1ɨt fED$$14$Mă1t $E.fEvEuuYvGBvfOUWEVSd$$E<$$U x:tNEԉ$Uԃ1t $D$E$ME$Ee[^_]$EE$E2E1D$|$$EEԃEċE$Ezt&EЉt$$$D$ED$ |$$Eԃt$|$EȋẺ$EȃD$ D$EԉD$Eĉ$EЉ$9xE$E$EfuԍD$ D$|$4$Eԃ4$D$Eԃ4$D$EԃsEuԉ$D$ UWVuSd$4$4$$U xtKEĉ$Uă1t $4$D$M4$Ee[^_]t&T$}D$<$$|$EUWVSd$ԋutE }T$D$ D$<$UM$MU܉D$<$T$EMD$ D$L$$e[^_]Í&{UWVSd$ԋutE }T$D$ D$<$UM$MU܉D$<$T$EMD$ D$L$$e[^_]Í&{UWVuSd$4$4$$U xtKEĉ$Uă1t $4$D$M4$Ee[^_]t&T$}D$<$$|$EUVSd$t$ t tF0D$F4$uFd$[^]USd$D$D$ $d$[]USd$T$ D$$t Љ$t,d$[]ÃЉ$ud$[]d$[]Ít&d$[]UWVSd$E E u؍}ԉ4$4$$EЋED$$@<$D$UЃEԋ<$ẺL$MԃE̋UD$D$L$ D$<$T$4$e[^_]Ív}؍uԉ<$<$$EЋED$$@4$D$EԃMЉE̋4$D$EԃMЉ4$D$ ED$D$L$D$<$UVSd$t$ nu(l$t$D$F$F$d$[^]UVSd$t$ @t F $@Ft2$D$D$F$Ft$d$[^]UVSd$t$ ~(@t F $@Ft2$D$D$F$Ft$d$[^]UVSd$t$ ~(@t F $@Ft2$D$D$F$Ft$d$[^]UVSd$t$ @t F $@Ft2$D$D$F$Ft$d$[^]UVSd$t$ ~(@t F $@Ft2$D$D$F$Ft$d$[^]UVSd$t$ @t F $@Ft2$D$D$F$Ft$d$[^]UVSd$t$ @Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ @Ft$@Ft2$D$D$F$Ft$d$[^]UVSd$t$ @Ft$FF@Ft2$D$D$F$Ft$d$[^]UVSd$t$ @t F $@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ ~(@t F $@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ ~(@t F $@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ ~(@t F $@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ @t F $@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ @t F $@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ @Ft$@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ @Ft$FF@Ft2$D$D$F$Ft$4$d$[^]UVSd$t$ @F t!9P t{$F FFt$F@Ft2$D$D$F$Ft$d$[^]Ív@ F vUVSd$t$ @F t%9P $F FFt$F@Ft2$D$D$F$Ft$4$d$[^]Í&@ F jUWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]v$,@@MԋG(@E @ $D$Uԃ1t$UUЉG$|$D$U|$D$G$G$UЉ4$T$M4UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$U4$Ee[^_]vE Uԋ@$D$Eԃ$E@@MƇ@1t $G$|$D$|$D$G$G$EЉ4$D$M4UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$U4$Ee[^_]vE Uԋ@$D$Eԃ$E@@MƇ@1t $G$|$D$|$D$G$G$EЉ4$D$M4UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]v$@@MԋƇ@E @ $D$Uԃ1t$UUЉG$|$D$U|$D$G$G$UЉ4$T$M1UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]v$,@@MԋG(@E @ $D$Uԃ1t$UUЉG$|$D$U|$D$G$G$UЉ4$T$M4UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]v$@@MԋGG G@E @ $D$Uԃ1t$UUЉG$|$D$U|$D$G$G$UЉ4$T$M#UVSd$t$ @F,t$F,FLt$FLF $FF t$FFt$FFt$FFt$FF t$F F 0rwlock initialization is failed. (node_crypto.cc) -----BEGIN CERTIFICATE----- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9H VEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5j LjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAw WhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0 aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMT GkdURSBDeWJlclRydXN0IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB gQCVD6C28FCc6HrHiM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwef U/ltWJTSr41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR 22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq 81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0PlZPvy5TYnh+dXIVtx6quTx8i tc2VrbqnzPmrC3p/ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNV BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUg Q29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lv bjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNl cnRzQHRoYXd0ZS5jb20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkG A1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0w GwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ AoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC 6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCXL+eQbcAoQpnXTEPew/UhbVSf XcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllD fU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAb i8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNV BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUg Q29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lv bjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlw cmVtaXVtLXNlcnZlckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1 OVowgc4xCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNh cGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRp ZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhI NTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQug2SBhRz1JPLlyoAnFxODLz6 FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/qgeN9EJN50CdHDcCAwEAAaMTMBEw DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJ eGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu 1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcU Qg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4G A1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0 aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMx EDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRl IEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2R FGiYCh7+2gRvE4RiIcPRfM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP /PvwDN1Dulsr4R+AcJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/ FP3gx7kCAwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUg QXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjAL BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gjIBBPM5iQn9QwHQYDVR0OBBYE FEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsF VjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaS bn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA 2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYT AlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5 OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYD VQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXX wc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg013gfqLptQ5GVj0VXXn7F+8qk BOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFFN zb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzo KQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcm eQD2+A2iMzAo1KpYoJ2daZH9 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMC QkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNV BAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBa MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdS b290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDaDuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtI K+6NiY6arymAZavpxy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCO XkNz8kHp1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3 dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DP AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRg e2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUFAAOCAQEA1nPnfE920I2/7LqivjTF KDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY7 76BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9 LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr +WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMX R2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMT Ckdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQL ExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8o mUVCxKs+IVSbC9N/hHD6ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7 SqbKSaZeqKeMWhG8eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQ BoZfXklqtTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feq CapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IHV2ccHsBqBt5ZtJot39wZhi4w NgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9yb290LXIyLmNy bDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEA mYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkI k7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRD LenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7TBj0/VLZ jmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlk YXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlD ZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29t MB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsT LFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQD ExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2 VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQ b7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QSv4dk+NoS/zcnwbNDu+97bi5p 9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6 EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2az SiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQG EwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1h cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3 MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAd BgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlT aWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2 R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6 yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFU okWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyo w0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBte HRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my /uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC/Y4wjylG sB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0xuKh XFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQG EwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1h cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3 MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAd BgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlT aWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYl S+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0 qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM8BDcVHOLBKFGMzNcF0C5nk3T875V g+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i 8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0 ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1Wr IhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKmfjaF3H48 ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJdRTjD OPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVz dC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJl Zi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0 ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4 KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0 Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVm LiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl ZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtK TY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/EC DNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ /cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzWnLLPKQP5L6RQstRIzgUyVYr9smRM DuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVC wQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQAD ggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6YfzX1XEC+b BAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKTJ1wD LW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDAS BgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29y cC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5u ZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQsw CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0 Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykg MTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCB hwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHIN iC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl +O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcwggHTMBEGCWCGSAGG+EIBAQQEAwIA BzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UE ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBM aW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVudHJ1c3Qu bmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkwNTI1 MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9 B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7 Rw7/JXyNEwr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7 qIcyunL2POI9n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G +bI= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAG A1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1v cmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjEL MAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEi MCAGA1UEAxMZQmFsdGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAKMEuyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2ygu zmKiYv60iNoS6zjrIZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo 6vWrJYeKmpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3z yZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkC AwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1BE3wMBIGA1UdEwEB/wQIMAYB Af8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27 TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukM JY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhS NzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67 G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UE ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFs IGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkG A1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlm YXggU2VjdXJlIEdsb2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEAuucXkAJlsTRVPEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/Ka elpzmKNc6fuKcxtc58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuo WcDNM50/o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYD VR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf 2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA 4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIYNMR1pHMc8Y3c7635s3a0kr/clRAe vsvIO1qEYBlWlKlV -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UE ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2lu ZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJV UzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1 cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fe k6lfWg0XTzQaDJj0ItlZ1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2D KocKIdMSODRsjQBuWqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6r Xyo4YgKwEnv+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZ FjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnm JXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2 sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UE ChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQD ExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAz ODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3Qw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH +9ZOEQpnXvUGW2ulCDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7 Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0 K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG 9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+ wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MIGPBgNVHSMEgYcwgYSAFJWx tPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1 c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVz dCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0 MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz 43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MYeDdXL+gz B2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xrmYbv P33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UE ChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3Jr MSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoX DTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYw JAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1 c3QgRXh0ZXJuYWwgQ0EgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3 GjPm8gAELTngTlvtH7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCw SXrbLpX9uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63u bUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5 aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0WicCAwEAAaOB3DCB2TAdBgNV HQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMB Af8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYT AlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwg VFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJ KoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw56wwCURQt jr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355e6cJ DUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49O hgQ= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UE ChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQD ExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQx NTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRk VHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4 jsIMEZBRpS9mVEBV6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrH AZcHF/nXGCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2ro yBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9 BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQWBBSBPjfYkrAfd59ctKtzquf2 NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfY krAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0 IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3Qg UHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmu G7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/AoGEjwxrzQ vzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9Yjll pu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UE ChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQD ExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAx MDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMU QWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBS b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTb Yjx5eLfpMLXsDBwqxBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqz ZwFZ8V1G87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i 2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mH fExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvES a0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6 WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGG gBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0Fk ZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRk VHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2Vh lRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6XdgWTP5XH AeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9zeRXEw Mn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAU BgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMg aW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwg SW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X DTA2MTEyNzIwMjM0MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQK Ew1FbnRydXN0LCBJbmMuMTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29y cG9yYXRlZCBieSByZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4x LTArBgNVBAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poB j6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypo wCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+ SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rV vDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2 HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB /zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSME GDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQCT 1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISMY/YP yyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE 2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPc j2A781q0tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYD VQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAe Fw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0 eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37 RqtBaB4Y6lXIL5F4iSj7Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3 OTsor8udGuorryGlwSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYq ODGBDSnhAMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszA CwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAW gBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NRMKSq6UWuNST6/yQsM9CxnYww DQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmYv/3VEhF5Ug7uMYm83X/50cYVIeiK AVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8X DZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6C CiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEk llgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 7CAFYd4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYD VQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIw NTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2Vv VHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEH CIjaWC9mOSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386D GXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvo cWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9 qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjANBgkqhkiG9w0BAQUF AAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VS syShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfO EVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQd tqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeX xx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UE ChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQw MzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2Vv VHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6Csgncbz YEbYwbLVjDHZ3CB5JIG/NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5S JBri1WeR0IIQ13hLTytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHq Z38MN5aL5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/ XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266 ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUapEBVYIAUJMA4GA1UdDwEB/wQE AwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7srJerJsOflN4WT5CBP51o62sgU7X AotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5 FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW4 1uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa 4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz 4iIprn2DQKi6bA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UE ChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0 MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdl b1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZI hvcNAQEBBQADggIPADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckU HUWCq8YdgNY96xCcOq9tJPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDg FgDgEB8rMQ7XlFTTQjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEY fyh3peFhF7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+ 59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xdVHppCZbW2xHBjXWo tM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCXteGYO8A3ZNY9lO4L4fUorgtW v3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2 Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3 wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGj YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8G A1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG 9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRcaanQmjg8 +uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2qaav dy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG 8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzn s0ccjkxFKyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3k t0tm7wNFYGm2DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkD MBmhLMi9ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6 ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UE ChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcN MDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6Gq dHtXr0om/Nj1XqduGdt0DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSC egx2oG9NzkEtoBUGFF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O 64ceJHdqXbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaq W9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IEr KIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73y/Zl92zxlfgCOzJWgjl6W70v iRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuU YbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xf BHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQID AQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQ KzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+zdXkzoS9t cBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ4T7G zKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEn cKpqA1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8p RPPphXpgY+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp 8RW04eWe3fiPpm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Bas x7InQJJVOCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH 6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSL akhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UE ChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMw MFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNV BAMTLUFtZXJpY2EgT25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0b fA+2l2h9LaaLl+lkhsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmL ojNoWBym1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qG Uwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCu JKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Z o/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Zo/Z59m50qX8zPYEX10zPM94wDgYD VR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3C YiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B 6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTI dGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6dssPmuujz9 dLQR6FgNgLzTqIA6me11zEZ7 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UE ChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgw MFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNV BAMTLUFtZXJpY2EgT25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3d xgz6sWYFas14tNwC206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238h ZK+GvFciKtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBY BbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMD bi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8BPeraunzgWGcXuVjgiIZGZ2yd EEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn6KVuY8INXWHQjNJsWiEOyiijzirp lcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp 2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1 uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124Hhn AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQEAwIBhjAN BgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FYT15R /LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p +DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R +FXgJXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMR n0T//ZoyzH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy 7aULTd3oyWgOZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7 lyoKZy2FAjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y 3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiC mfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYD VQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNl cnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIw NjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAa BgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCvV95WHm6h2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVI sZHBAk4ElpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzz lr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0 lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMe zUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytM iUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1k k5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGI xHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw ++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt398znM/j ra6O1I7mT1GvFpLgXPYHDw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYD VQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTEx MDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRv IFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAM6xwS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYV M42sLQnFdvkrOYCJ5JdLkKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82Kxu jZlakE403Daaj4GIULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2 bu4lXapuOb7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEA AaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESS bLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIK umB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZgFCdsMneMvLJymM/NzD+5yCRC FNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQ pNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6J QEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UE CAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21v ZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0 MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdy ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENB IExpbWl0ZWQxITAfBgNVBAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686td UIoWMQuaBtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe 3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8Ioa E+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULi mAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7S w4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYD VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDov L2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0 dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG 9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLzRt0vxuBq w8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlI MCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UE CAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21v ZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4X DTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgM EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2Rv IENBIExpbWl0ZWQxJDAiBgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6 EfQlhfPMcm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJA GysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtG Cd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz6YiO/O1R65NxTq0B50SOqy3L qP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJ Y08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeG NWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3Js MDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNl cy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmjZ55B+glS zAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRLDXE9 7IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6s Cx1HRR3B7Hzs/Sk= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UE CAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21v ZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAe Fw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQI DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9k byBDQSBMaW1pdGVkMSUwIwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWa HiWsnOWWfnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgym BwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW1O24zG71++IsWL1/ T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7kUlcsutT6vifR4buv5XAwAaf 0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1UdDgQWBBTFe1i97doladL3WRaoszLA eydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqg OIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu Y3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2Vy dmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32pSxBvzwG a+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDABHcT uPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOj GM9O9y5Xt5hwXsjEeLBi -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcG A1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYD VQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTR vM16z/Ypli4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtf fp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZ yH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospUxbF6lR1xHkopigPcakXBpBle bzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4wPQYIKwYBBQUHAQEEMTAvMC0GCCsG AQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUw AwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCB xxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBw YXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJhY3RpY2Vz LCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEWFmh0 dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRp b24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5ggQ6tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70 mpKnGdSkfnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe /QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsT IlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJD Wl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOKSnQ2+Q== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNV BAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0w NjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBR dW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4Gt Mh6QRr+jhiYaHv5+HBg6XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp 3MJGF/hd/aTa/55JWpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsR E8Scd3bBrrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp +ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI 0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2 BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIizPtGo/KPaHbDRsSNU30R2be1B 2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOhD7osFRXql7PSorW+8oyWHhqPHWyk YTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyP ZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQAB o4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwz JQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1Zh ZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUvZ+YT RYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgt JodmVjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q8 0m/DShcK+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W 6ZM/57Es3zrWIozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQj rLhVoQPRTUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6y hhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO 1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAF ZdWCEOrCMc0u -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNV BAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0w NjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBR dW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTP krgEQK0CSzGrvI2RaNggDhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZ z3HmDyl2/7FWeUUrH556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2Objyj Ptr7guXd8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mta a7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJ k8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1 ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEXMJPpGovgc2PZapKUSU60rUqFxKMi MPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArl zW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQAB o4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMw gcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0aWZpY2F0 ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYBBQUH AgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1 XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEb MBkGA1UEAxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62g LEz6wPJv92ZVqyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon 24QRiSemd1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd +LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hR OJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j5 6hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6l i92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8S h17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7 j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEo kt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7 zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UE ChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJv b3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEY MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0 aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8 V6UMbXaKL0u/ZPtM7orw8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzG jGdnSj74cbAZJ6kJDKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1ae V+7AwFb9Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OV YNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZ aNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG 9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g0dNq/vu+m22/xwVtWSDEHPC32oRY AmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7K aEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKq L8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfci oU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UE ChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoX DTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UE AxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAX SjWdyvANlsdE+hY3/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gX GM2RX/uJ4+q/Tl18GybTdXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7 Jp12W5dCsv+u8E7s3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCW ctRUz2EjvOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu 8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0T AQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEB BQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zilzqsWuasvfDXLrNAPtEwr/IDv a4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEIcbCdjdY0RzKQxmUk96BKfARzjzlv F4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHa PJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj 4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwG A1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJs YW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNV BAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0 IGRlciBOZWRlcmxhbmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAmNK1URF6gaYUmHFtvsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeI QGv33N0iYfXCxw719tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX9 4p2i71MOhXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoL bHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGO MAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6 Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQD AgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEA BYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5 fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0 C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy 7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsRiJf2fL1L uCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkG A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UE ChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVz dC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0x OTA2MjQxOTA2MzBaMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNh bHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsT GGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dD MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0 vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrL Z9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c 3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv33i+Ybqypa4ETLyorGkVl73v67SM vzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8E BTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAu hixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUE IzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowftGzet/Hy+ UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0I3Kg qgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jF VkwPDPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkG A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UE ChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVz dC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQy WhcNMTkwNzA5MTgxOTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQH Ew5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn 0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7Ho xuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEH OG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1p LgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjfPe58BEydCl5rkdbux+0ojatNh4lz 0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8G A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9 MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3 YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM//bey1Wi CuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogWXecB 5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchq J/kniCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnAS fxAynB67nfhmqA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UE ChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3 LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAe Fw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQK Ex5BQyBDYW1lcmZpcm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cu Y2hhbWJlcnNpZ24ub3JnMSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIB IDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1 c2VHfRtbunXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IU tdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUM I/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyXroDclDZK9D7ONhMeU+SsTjoF 7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0f BDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNy bDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCG SAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3Jn MCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJzaWduLm9y Zy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAifJ/7 kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QU u/wNUPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34Oi rsrXdx/nADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuz Pu5ifdmA6Ap1erfutGWaIZDgqtCYvDi1czyL+Nw= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UE ChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3 LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcN MDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNo YW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0G CSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQK kotgVvq0Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjq GTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8Co X6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oP X9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2 MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3Js MB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZI AYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5v cmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hhbWJlcnNp Z24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEAPDtw kfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76Svpyk BMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHR Jw0lyDL4IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxK oHflCStFREest2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYD VQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxv emF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UE AxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5 MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdI dW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0 TG9jayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWB xdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QV Or/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWo DpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+ pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii 7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8C AQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEg RXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJp enRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGph cmFzIGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxh cGphbiBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRv IGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRo ZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5l dC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUA A4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXH jFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jy f1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEV ZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q 5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNV BAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4x GjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAo Q2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEw MjJaMIGZMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExv Y2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sx MjAwBgNVBAMTKU5ldExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kf pPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4IC nzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEB BAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFu eSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVu IGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFt YXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGku IEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVn dGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8v d3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQg dGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUt bWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFO zT4JwG06sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgB azMpUIaD8QFI -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNV BAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4x GjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6 IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0 MDgxMVowgZsxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0 TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRv azE0MDIGA1UEAxMrTmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFk bzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH 0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEA AaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG +EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJNRklHWUVMRU0hIEV6ZW4gdGFudXNp dHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxl aWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZv bHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2 ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBsZWlyYXNh IG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBodHRw czovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2Ug YW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRM b2NrIENQUyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBi eSBlLW1haWwgYXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKA CtiG8XmYta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeA yNDYpQcCNJgEjTME1A== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkG A1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJh bXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjEL MAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMb WFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCY JB69FbS638eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5df T2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3 hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSP puIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJ KwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O BBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwu eHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcN AQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxtqZ4Bfj8p zgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8nnxCb HIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UE ChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAy IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYy MFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjEx MC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAw DQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWiz V3GgXne77ZtJ6XCAPVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HF iH7Eux6wwdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44 dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLEsNKR1EwRcbNhyz2h/t2oatTj MIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2oatTjoWekZTBjMQswCQYDVQQGEwJV UzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRk eSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJ KoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYX MP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQHmyW74cN xA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9R aRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b vZ8= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UE ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENs YXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5 MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2ll cywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRo b3JpdHkwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N 78gDGIc/oav7PKaf8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMe j2YcOadN+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4Umkhyn ArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W 93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRb Vazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0fhvRbVazc1xDCDqmI56FspGowaDEL MAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAw BgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1ep oXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJlxy16paq8 U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJDKVtH CN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UE ChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUg U2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN MDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul3 8kMKogZkpMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYc cjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d 5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9 bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z6+hsTXBbKWWc3apdzK8BMewM69KN 6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHu EhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZP V/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOz EmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYEFE4L7xqk QFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0Y29t Lm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYB BQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIB FilodHRwOi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUH AgIwgcMwJxYgU3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0 ZWQgTGlhYmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUg YXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQD AgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Ey weg78T3dRAlbB0mKKctmArexmvclmAk8jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk 4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8 rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrz ZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYuL6lwhceW D3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+PwqyvqCUqDvr0tVk+vB tfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl1njFmUNj403g dy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/lwLFCRsI 3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYD VQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9y aXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAu BgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN8 6aXfTEc2pBsBHH8eV4qNw8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOU T0b3EEk3+qhZSV1qgQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQk clSGxtKyyhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBq nTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUq dULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FCVGqY8A2tl+lSXunVanLeavcb YBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNt sea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6O M5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMB AAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkG BGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZTulStbng CnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6TjZwj/ 5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1 AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0 dDzpD6QzDxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5L KlwCCDTb+HbkZ6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05e r/ayl4WXudpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v 3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYD VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNh dGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2 MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTEl MCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Nj b20gUm9vdCBDQSAxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h +BvVM5OAFmUgdbI9m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrW W/oLJdihFvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdnt Mhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJ vbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJn B3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbNcA78yeNmuk6NO4HLFWR7uZToXTNS hXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyD CW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0W R+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p /r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0jBBgwFoAU AyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9MA0G CSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzn eAXQMbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL 0iT43R4HVtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZ NuR55LU/vJtlvrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLH UKKwf4ipmXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBa ZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7G h0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5g mwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6MBr1mmz0DlP5OlvRHA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYD VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAw MDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQg SW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1 cmVkIElEIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOA XLGH87dg+XESpa7cJpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lT XDGEKvYPmDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/l bQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcX xH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQE AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF66Kv9JLLgjEtUYunpyGd823IDzAf BgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog68 3+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqo R+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+ fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe+o0bJW1s j6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYD VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBa Fw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBS b290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKP C3eQyaKl7hLOllsBCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscF s3YnFo97nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6g SzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSii cNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYD VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgw FoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1E nE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDi qw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBA I+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQkCAUw7C29 C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYD VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2 MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERp Z2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNl cnQgSGlnaCBBc3N1cmFuY2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBAMbM5XPm+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlB WTrT3JTWPNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeB QVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5 OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsgEsxBu24LUTi4S8sCAwEAAaNj MGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9H AdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3 DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1 ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VH MWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCevEsXCS+0 yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkG A1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkg Q0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8G A1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxv c0NXYKwzCkTsA18cgCSR5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLR YE2+L0ER4/YXJQyLkcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v 0lPubNCdEgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC 40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNV HQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQw MC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29tL0NSTC9jbGFzczIuY3JsMA0GCSqG SIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5t n9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabg lZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW 2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7l7+ijrRU -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYD VQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENB IFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRh bCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdA wRgUi+DoM3ZJKuM/IUmTrE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwG MoOifooUMM0RoOEqOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4X Lh7dIN9bxiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw 7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkq tilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw HQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqGSIb3DQEBBQUAA4IBAQCjGiyb FwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikugdB/OEIKcdBodfpga3csTS7MgROSR 6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaL bumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir /md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06Xyx V3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYD VQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERT VCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzEx MjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBU cnVzdDERMA8GA1UECxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5 DgO0PWGSvSMmtWPuktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+io kYi5Q1K7gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd7 55jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEITajV8fTXpLmaRcpPV MibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD AgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3QuY29tMGIGA1UdIARbMFkwVwYKYIZI AWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZp Y2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7 eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99 Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQqnExaBqXp IK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXsvFcj 4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 oKfN5XozNmr6mis= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVT VCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQG DAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJp bGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe LjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RS VVNUIEVsZWt0cm9uaWsgU2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNV BAYMAlRSMQ8wDQYDVQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1Qg QmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFb azt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1 cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35JYbOG7E6mQW6EvAPs9TscyB/C 7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFd SsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4 f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3 DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd 82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55FyB0SFHljK VETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgYnNN9 aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVT VCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQG EwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2Fz xLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2 VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8Sx MQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJp bGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7D kUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9 irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDc RhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52 YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp 48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQW BBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMB Af8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4Jl3vpao6 +XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+hGIA F728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9R nuk5UrbnBEI= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNI MRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0g RzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMG A1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIIC IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJC Eyq8ZVeCQD5XJM1QiyUqt2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcf DmJlD909Vopz2q5+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpi kJKVyh+c6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT 28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdV xVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02yMszYF9rNt85mndT9Xv+9lz4p ded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkOpeUDDniOJihC8AcLYiAQZzlG+qkD zAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR7ySArqpWl2/5rX3aYT+Ydzyl kbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+Zr zsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E FgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn 8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDovL3JlcG9z aXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm5djV 9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8 AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0V qbe/vd6mGu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9Qkvfsywe xcZdylU6oJxpmo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/Eb MFYOkrCChdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG 2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/Y YPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkk W8mw0FfB+j564ZfJ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gx FTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAt IEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTAT BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcy MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dO cbpLj6VzHVxumK4DV644N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGi TSf5YXu6t+WiE7brYT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi 0R86TieFnbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH 6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyC bTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jM qDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/ +dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBsROopN4WSaGa8gzj+ezku01DwH/te YLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIj QAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calI Lv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV HQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0cDovL3Jl cG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P4JUw 4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcS H9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkD lm4fS/Bx/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakM DHiqYMZWjwFaDGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHk Flt4dR2Xem1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29 MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI 4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s 5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYD VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJp bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYy MzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQD EyhHZW9UcnVzdCBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92 /ZV+zmEwu3qDXwK9AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa 9OBesYjAZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0 EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s 0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV HQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZIhvcNAQEFBQADggEBAFpwfyzdtzRP 9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z +gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD3 2sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJly c1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkG A1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0g Rm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3Qg Q0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTAT BgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBE aXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6 ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3 /AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29 dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk6KHYcWUNo1F77rzSImANuVud 37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9 yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+ Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G A1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7OR tvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAXxPcW6cTY cvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89jxt5 dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcN MzYwNzE2MjM1OTU5WjCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMu MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBW ZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0g RzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8 RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbext0uz/o9+B1fs70PbZmIVYc9g DaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ0 23tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9 r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MU CH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNV HQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3 DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU 7qKEKQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMt EMze/aiCKm0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7 MzVIcbidJ4vEZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYD VQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNl Y3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UE BhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1 cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7C T8rU4niVWJxB4Q2ZQCQXOZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29 vo6pQT64lO0pGtSO0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZ bf2IzIaowW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj 7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xH CzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIE Bh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE /f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL2NybC5zZWN1cmV0cnVz dC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDt T0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQ f2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cp rp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR3ItHuuG5 1WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYD VQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNl Y3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYD VQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNl Y3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxV aQZx5RNoJLNP2MwhR/jxYDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6Mpjh HZevj8fcyTiW89sa/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ /kG5VacJjnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPi XB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGC NxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9E BMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJl dHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IB AQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQV DpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895 P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xcf8LDmBxr ThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkG A1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9y ZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQsw CQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxm b3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECL i3LjkRv3UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI 2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7eu NJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC 8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQF ZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVIrLsm9wIDAQABo4GOMIGLMB0GA1Ud DgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw AwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9D ZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5 t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/RxdMosIG lgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmcIGfE 7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYD VQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAw WhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1 dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBB dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xG zuAnlt7e+foS0zwzc7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQ NJIg6nPPOCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1 QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMh qxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA 106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MFIGA1Ud HwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25z Q2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ot t3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVR DuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH /nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3HtvwKeI8lN3 s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxDydi8 NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNV BAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5r IE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo b3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMx IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJn byBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0 ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGe OARBJe+rWxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4 S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN 7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFafSZtsdvqKXfcBeYF8wYNABf5x /Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMBAAGjggE0MIIBMDAPBgNVHRMBAf8E BTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29t L3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+ 0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkG A1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBD ZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPIK013 4/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1 NSljqHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE 13YgY+esE2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvU FpULB6ouFJJJtylv2G0xffX8oRAHh84vWdw+WNs= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UE BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEa MBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTEL MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2Fs Zm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0Mg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmC FYX7deSRFtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZ SBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq hkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDmfQjGGoe9GKhzvSbKYAydzpmf z1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeAU/7dIOA1mjbRxwG55tzd8/8dLDoW V9mSOdY= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8w DQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYD VQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5w bS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYT AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0RO MQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FA c2dkbi5wbS5nb3V2LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLF MzvABIaIs9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2 xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfR NWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUz aJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAxVs5wKpayMLh35nnAvSk7/ZR3 TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQtQIDAQABo3cwdTAPBgNVHRMBAf8E BTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSj BS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjAN BgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2 FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsgCrpa/Jos PL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNIlQgR HAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF 0mBWWg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UE ChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29t bXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlow YDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4x KjAoBgNVBAsTIVNlY3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1 OXj/l3X3L+SqawSERMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1 V4qe70gOzXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5 kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+z yRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eCOKyrcWUXdYydVZPmMA4GA1Ud DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBn XcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRG ef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXk gKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF7 5x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkG A1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAw NTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUg V0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5 NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJp Z2h0IChjKSAyMDA1MSIwIAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYD VQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSL tZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dy oJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg4E8HsChWjBgbl0SOid3gF27n Ku+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3RLoGbw9ho972WG6xwsRYUC9tguSYB BQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+ rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEB AEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VF vbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXahNVQA7bi hKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEYokxS dsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMC VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgw MjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYD VQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ 2RHP7gJYHyX3KqhEBarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaO IG+YD/isI19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNh kcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khV dWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkG A1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQw EgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBD QTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYD VQQHEwhCdWRhcGVzdDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temln bm8gQ0ExIjAgBgNVBAMTGU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICb PHiN1I2uuO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+ LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOS J/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw 7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx62z69Rrkav17fVVA71hu5tnV vCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBz Oi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemln bm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFi BgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1 L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5 ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBnAGEAZADh AHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA4QBs AHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAt AHMAegBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSG IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3pp Z25vLmh1L0NOPU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8l MjBDQSxPPU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9A ZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEW MBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UE BxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3 QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoT DU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3Nl YyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZh hNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl7tnlJNUb 3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a86g4nzUGCM4ilb7N 1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehKyVZs15KrnfVJ ONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQBS6kRnSlq LtBdgcDPsiBDxwPgN05dCtxZICU= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZS MRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMw NVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczER MA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ 1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lI zw7sebYs5zRLcAglozyHGxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxr yIRWijOp5yIVUxbwzBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJb zg4ij02Q130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0T AQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AU Gu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlt eW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEG CWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl 1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxA GYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9q cEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/QwWyH8EZE0 vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UE BhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0 Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0Eg SUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoG A1UEChMTVEMgVHJ1c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xh c3MgMiBDQTElMCMGA1UEAxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/R KrLqk2jftMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqki RUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9 H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+995OKdy1u2bv/jzVrndIIFuoAl OMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD AgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHc oIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJ LmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUy MENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9i YXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4GdXpo UxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1 KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbq NZn1l7kPJOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcX jFq32nQozZfkvQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UE BhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0 Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0Eg SUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoG A1UEChMTVEMgVHJ1c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xh c3MgMyBDQTElMCMGA1UEAxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJ DRoeIMJWHt4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogk AHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdz s5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5 SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD AgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHc oIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJ LmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUy MENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9i YXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzEO2ea tN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL 2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+Gzj BgnyXlal092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v +5ZWgOI2F9Hc5A== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UE BhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0 Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2Fs IENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEc MBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIg VW5pdmVyc2FsIENBMSYwJAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B 6DGtxnSRJJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPi UHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+ F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQfezmlwQek8wiSdeXhrYTCjxD I3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0jBBgwFoAUkqR1LKSevoFE63n8isWV pesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyk nr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8R MKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNer NXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPTujdEWBF6 AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a7CIM HOCkoj3w6DnPgcB77V0fb8XQC9eY -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UE ChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRl cjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAw WhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVs ZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1 dHNjaGUgVGVsZWtvbSBSb290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQCrC6M14IspFLEUha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1c Os7TuKhCQN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1 Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFh mHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0G A1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB /wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f7 6Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSY SKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juw zTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mUCm26OWMo hpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkG A1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJ TDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24g U2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjW aueP1H5XJLkGieQcPOqs49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqY HU4Gk/v1iDurX8sWv+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20 IZFKF3ueMv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr 9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z 1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRw Oi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNlY3VyZWRDQS5jcmwwDgYDVR0P AQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTB S+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq 1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tM M1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAm laxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQzOjRXUDpv gV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMP Q3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2 MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5j MR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO2 1O1fWLE3TdVJDm71aofW0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2O lTEQXO2iLb3VOm2yHLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeW P032a7iPt3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQID AQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2 CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJs aWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8GA1UdIwQYMBaAFLYIew16zKwgTIZW Ml7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ej hVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24C JJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+z v+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jWWL1WMRJO Ecgh4LMRkWXbtKaIOM5V -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYD VQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsM IWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0z NDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29t IENvLiwgTHRkLjEqMCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U 82N0ywEhajfqhFAHSyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrB p0xtInAhijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZr xQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ad o4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffAsgRFelQArr5T9rXn4fg8ozHS qf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ETOxQvdibBjWzwloPn9s9h6PYq2l Y9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUa dCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+Xk wY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3 pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLHClZ87lt4 DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B01GqZ NF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnV vwdVxrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltab rNMdjmEPNXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc 7b3jajWvY9+rGNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8 GrBQAuUBo2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS /jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C 6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yI VMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4 EZw= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYD VQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRl a25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVz YWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0g VUVLQUUxIzAhBgNVBAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFU w5xCxLBUQUsgVUVLQUUgS8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAt IFPDvHLDvG0gMzAeFw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UE BhMCVFIxGDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBG BgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5z dGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkx SjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xh ecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA im1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6V QIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+81 8qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oLhmUZEdPp CSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAdBgNV HQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTf vCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpN eBLWrcLTy9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceE xh/VS4ESshYhLBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0 a+IDRM5noN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs yZyQ2uypQjyttgI= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UE CgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAx MB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNV BAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0Eg MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE4 25KEHK8T1A9vNkYgxC7McXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2l FYxuyHyXA8vmIPLXl18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTX jAePzdVBHfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B 5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9E drsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E FgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUA A4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdl yTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaa kZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZS r4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+o RxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UE CgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAx MB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNV BAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0Eg MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZE C4DVC69TB4sSveZn8AKxifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhj P5JW3SROjvi6K//zNIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IX F4Rs4HyI+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3 lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E FgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUA A4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6 Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT +t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs 5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4ok oyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VC RyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQK DC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYD VQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9F QkcgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UE CgwuRUJHIEJpbGnFn2ltIFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkG A1UEBhMCVFIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4 f6en5f2h4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggD g3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3M enaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4c0JqwmZ2sQomFd2TkuzbqV9U IlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGyY5lhcucqZJnSuOl14nypqZoaqsNW 2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBV FCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5H d4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8 owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2 l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wWZ5b6 SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVG oGgmzJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswno T4cCB64kXPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7 s9QJ/XvCgKqTbCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKf AB5UVUJnxk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN 4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP 14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3 x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIU pgqT -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREw DwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQx NzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lH TjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBALczuX7IJUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oq rl0Hj0rDKH/v+yv6efHHrfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsA fsT8AzNXDe3i+s5dRdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUo Se1b16kQOA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPx fIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJLjX8+HXd5n9liPRyTMks1zJO 890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6 IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KT afcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI 0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5V aZVDADlN9u6wWk5JRFRYX0KD -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwG A1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcw NDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNO TklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LR b+1VvG7q6KR5smzDo+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx 3zkBwRP9SFIhxFXf2tizVHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJ MfAw28Mbdim7aXZOV/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPih NIaj3XrCGHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIA BzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsG A1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO76bVOxEwDQYJKoZIhvcNAQEF BQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMX YFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23 xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftO hpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8 yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UE ChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEy MTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBh bmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdh jYq+xpqcBrSGUeQ3DnR4fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7 NCPbXCbkcXmP1G55IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH /OlQR9cwFO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW 8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8B Af8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzl m73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseODvOOCt+ODp+ODs0NBMA8GA1UdEwEB /wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJ fHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsv cJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc /WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdLrosot4LK GAfmt1t06SAZf7IbiVQ= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkG A1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdl b1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1 c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAw MFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJ bmMuMTkwNwYDVQQLEzAoYykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg dXNlIG9ubHkxNjA0BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRo b3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD6 14SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeD XTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/WJmxsYAQlTlV+fe+/lEjetx3d cI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ 6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB /zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqG SIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTT Od8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGDAWh9jUGh lBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33st/3L jWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UE BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3Rl LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmlt YXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQsw CQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0 aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3Rl IFByaW1hcnkgUm9vdCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFS eIf+iha/BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/ MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZI zj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3KMqh9HneteY4sPBlcIx/AlTC v//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3Krr0TKUQNJ1uo52icEvdYPy5yAlej j6EULg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkG A1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0g Rm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg Q0EgLSBHMzAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZp Y2VzIERpdmlzaW9uMTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0 aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu 86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/E th9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3To O39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY7CFJXJv2eul/VTV+lmuNk5Mny5K7 6qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiY nODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQAD ggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1but8jLZ8HJ nBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC8rZc JwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UE BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1Ry dXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3Qg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoX DTM4MDExODIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMu MTkwNwYDVQQLEzAoYykgMjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxNjA0BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf 691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSW WaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7mndwxHLKgpxgceeHHNgIwOlavmnRs 9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2npaqBA+K -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBh dXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTla MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMu IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbna zU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWHH26MfF8WIFFE0XBPV+rjHOPM ee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL729fdC4uW/h2KJXwBL38Xd5HVEMkE6 HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ 79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQAB o4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEw X6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1UdDgQWBBS2 d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3Y8xu TPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahf YtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tew XDpPaj+PwGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WI g0vvBZIGcfK4mJO37M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UE BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz dCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgw MTE4MjM1OTU5WjCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8w HQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQw djAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmD iWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3vefLK+ymVhAIau2o970ImtTR1Z mkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYI KwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoas jY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYw HQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgm YFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTER MA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFu w7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwws TmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjEx MTUwODIxWhcNMjgxMjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFw ZXN0MRUwEwYDVQQKDAxOZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lh ZMOzayAoQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkg KENsYXNzIEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFtt vzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn 7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5VA1lddkVQZQBr17s9o3x/61k /iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7 GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiL o0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpn k/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ 5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C +C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzCbLBQWV2Q WzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5KfnaNwUA SZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwG A1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJs YW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjEL MAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwi U3RhYXQgZGVyIE5lZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAMVZ5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZ qhQlEq0i6ABtQ8SpuOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU2 54DBtvPUZ5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV 3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9 whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2U uIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V6548r6f1CGPqI0GAwJaCgRHOThuVw+ R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/ Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymY NqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYD VR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNVHQ8BAf8E BAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUAA4IC AQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz +51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUX vQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sU OlWDuYaNkqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fM dWVSSt7wsKfkCpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2t UKRXCnxLvJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8s V4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXq ZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOL nR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UE BxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcw HhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UE BxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6 UShGhJd4NLxs/LxFWYgmGErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhq FQ4/61HhVKndBpnXmjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaS fQUMbEYDXcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJd KxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E FgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nh b3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAt oCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZo dHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuB HpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA /ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/CBUz91BK ez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6Kezfq wzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA 4Z7CRneC9VkGjCFMhwnN5ag= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglw a2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vz a3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVow XTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMg U2VydGlmaXRzZWVyaW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B8 41oiqBB4M8yIsdOBSvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/ mX8MCgkzABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGz lc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQ n/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8wggEWBgNVHSAEggENMIIBCTCC AQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHDHoHAAFMAZQBlACAAcwBlAHIAdABp AGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBz ACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABh AG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABh AG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYEFASqekej 5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4GA1Ud DwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbR xZyLabVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+ Ne6ML678IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ ZEuOyoqysOkhMp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aW AuVrua0ZTbvGRNs2yyqcjg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNV BAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4X DTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSS HSL22oVyaf7XPwnU3ZG1ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8g PW2iNr4joLFutbEnPzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7j EAaPIpjhZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208 o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQE AwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsCmEEIjEy82tvuJxuC52pF7BaL T4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37piol7Yutmcn1KZJ/RyTZXaeQi/cImya T/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgC IDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES 7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4Jx HYB0yvbiAmvZWg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UE ChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJl U2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNV BAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRww GgYDVQQDExNTZWN1cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEA/XeqpRyQBTvLTJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1y fIw/XwFndBWW4wI8h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyK yiyhFTOVMdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V 1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsCh8U+iQIDAQABo0Iw QDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKChOBZmLqdWHyGcBvod7bkixTgm2E5P 7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI 6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAY ga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR 7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN QSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNF RElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVT MB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00g Um9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjAN BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7 w2rbYgIB8hiGtXxaOLHkWLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auOD AKgrLlUTY4HKRxx7XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW1 0W2ZEi5PGrjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ 1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQA twBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQUfecyuB+81fFOvW8XAjnXDpVC OscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTu tYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27 k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MC AwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB 53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNvbS5lZGlj b21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqgaHtP kl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH 1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf 8seACQl1ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7 tq3PgbUhh8oIKiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtP F2Y9fwsZo5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6 zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQY XlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyl eW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+ KzgHVZhepA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJI VTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMM Hk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0Bl LXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQG EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNV BAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5m b0BlLXN6aWduby5odTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG 2KfgQvvPkd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDH QWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqp GrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV 87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQF MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAf BgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3pp Z25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5Dw pL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775tyERzAMB VnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02yULy Mtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi LXpUq3DDfSJlgnCW -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYD VQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoG A1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWlj aXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAm BgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2 ZW4gS29rIEVsZWt0cm9uaWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDB S75+PNdUMZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy 2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+T zuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+t iEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w HQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lT W2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnL pRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzl vBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtqfJ7lddK2 l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMX R2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMT Ckdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQL ExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5Bngi FvXAg7aEyiie/QV2EcWtiHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0M K66X17YUhhB5uzsTgHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL 0gRgykmmKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613 t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQD AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0G CSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7lgAJQayzE4aGKAczymvmdLm6AC2u pArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdW PoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0 095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJr lAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH WD9f -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMx QjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwg Q0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNV BAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zl c2lvbmFsIENJRiBBNjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDK lmuO6vj78aI14H9M2uDDUtd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOS L/UR5GLXMnE42QQMcas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9 qFD0sefGL9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2 f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44 I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCyZ/QYFpM6/EfY0XiWMR+6Kwxf XZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy 9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF 8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mV BngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8C AQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZpcm1hcHJv ZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAAbABh ACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+ xDLx51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5x hOW1//qkR71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5 eTSSPi5E6PaPT481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5Fl ClrD2VQS3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2 gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYD NEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhr JKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIyS xZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYD VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcN MDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwL SVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQDJ03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5Tz cqQsRNiekpsUOqHnJJAKClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpz bm3benhB6QiIEn6HLmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJ GjMxCrFXuaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8 hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG7 0t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyNBjNaooXlkDWgYlwWTvDjovoD GrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+0rnq49qlw0dpEuDb8PYZi+17cNcC 1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQD fo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNV HREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4g LSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAxMCBWaXRv cmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9 fbgakEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJO ubv5vr8qhT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m 5hzkQiCeR7Csg1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Py e6kfLqCTVyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqt ujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZ pR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6i SNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE4 1V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJF VTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZp cm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1l cmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4 MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYD VQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEg Uy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+ JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCG hSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072QDuKZoRuGDtqaCrsLYVAGUvGe f3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL +8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9 ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esH nFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2w sWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhjya6BXBg1 4JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2EQID AQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4x CzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQg d3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNV BAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2Ug Um9vdCAtIDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI hvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I 6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0 /gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk1 8pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rc f+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+K MjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb 0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1DefhiYtUU7 9nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRgOGcEMeyP84LG3rlV 8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJF VTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZp cm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1l cmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAe Fw0wODA4MDExMjMxNDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UE BxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9h ZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwG Mi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7G706tcuto8xEpw2u IRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBA spjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/ LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkB fSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9 kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al /3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r 6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9JhwZG7SMA0 j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMBAAGj ggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkG A1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cu Y2FtZXJmaXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMS QUMgQ2FtZXJmaXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAt IDIwMDiCCQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEF BQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv 4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWC koQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIa dJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJ jUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uY lDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3L m6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4gev8CSlDQb 4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z09gwzxMNTxXJhLyn SC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNV BAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29t LCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAt IEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAw DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5 LmNvbSwgSW5jLjExMC8GA1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3 gElY6SKDE6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH /PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLI jWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6 gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGRtDtwKj9useiciAF9n9T521Nt YJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3 DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC 2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95 kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo 2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPOLPAvTK33 sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNV BAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBU ZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRl IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJ BgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYD VQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQg Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSu S/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhh dM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dNdloedl40wOiWVpmKs/B/pM29 3DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbUJtQIBFnQmA4O5t78w+wfkPECAwEA AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n 2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWU XuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox 9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/KpL/QlwVK vOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZc2T5 NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNV BAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBU ZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENl cnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1 OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNk YWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJT dGFyZmllbGQgU2VydmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2 dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS 7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufehRhJfGZOozptqbXuNC66DQO4 M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFBrMnUVN+HL8cisibMn1lUaJ/8viov xFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBL NqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynV v/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkdiEDPfUYd /x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jzaYyWf /Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMx FDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFs MB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNV BAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTW zsO3qyxPxkEylFf6EqdbDuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U 6Mje+SJIZMblq8Yrba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNA FxHUdPALMeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1J dX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8w DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAFis 9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M 06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1Ua ADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjip M1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclN msxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMx FDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5n MB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNV BAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWRE ZY9nZOIG41w3SfYvm4SEHi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ /Ls6rnla1fTWcbuakCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXL viRmVSRLQESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp 6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKB Nv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0w DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAIlX shZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t 3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA 3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzek ujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfx ojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMx FDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4X DTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoM C0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG 9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64t b+eT2TZwamjPjlGjhVtnBKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/ 0qRY7iZNyaqoe5rZ+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/ K+k8rNrSs8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua 2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/ 9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+SqHZGnEJlPqQewQcDWkYtuJfz t9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m 6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKP KrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNC MEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYD VR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMgNt58D2kT iKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC6C1Y 91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQ wUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFo oC8k4gmVBtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5Yw H2AG7hsj/oFgIxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/ qzWaVYa8GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAlo GRwYQw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAe Fw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQK DAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcq hkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQU X+iOGasvLkjmrBhDeKzQN8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR 4ptlKymjQjBAMB0GA1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9C a/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYD VQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm aWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0Ew HhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UE ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmlj YXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/ 91sts1rHUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmt VSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM +44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8xAcPs3hEtF10fuFDRXhmnad4H MyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQI ds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEB AKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsi srCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv 94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI03YnnZot BqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UE ChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRp bm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1 OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIg NDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2 DpdUzZlMGvE5x4jYF1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOr J3NqDi5N8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0 K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb 4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6 DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTClrLooyPCXQP8w9PlfMl1I9f09bze 5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGo OBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75 mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29Ynf AgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJKoZIhvcN AQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/xWqnd IlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCX wH40nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQR E7rWhh1BCxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPb VFsDbVRfsbjvJL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJ Oqxp9YDG5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XS APCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ 8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0G A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQD Ex5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEw NzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5j aWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZh bGVuY2lhbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qd yu0togu8M1JAJke+WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9pt I6GJXiKjSgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt5 5cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxkHl6AovWDfgzWyoxV jr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7MIIDNzAyBggrBgEFBQcBAQQm MCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB /wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcC AjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA YwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQA IABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA YwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBtAGkA ZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUA ZQBuAHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgA dAB0AHAAOgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYB BQUHAgEWGWh0dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90 ECjcPk+yeAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMG UEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5Wgw DQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQ qHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHP jCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+ eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3R r9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYx n7fofMM= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYG A1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERh dGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBB LVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJ BgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1l IGltIGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwt MDMxGTAXBgNVBAMMEEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuK qiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXl yDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9 j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGj NjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIB BjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvU B/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdC oLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GSmYHovjrH F1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6ahq9 7BvIxYSazQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UE CgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBf MQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSow KAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bi hSX0NXIP+FPQQeFEAcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQ sIBct+HHK3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJb KdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxY A7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud DgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG9w0BAQUFAAOCAQEAPNV3PdrfibqH DAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqG fczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4g umlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKu D8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UE ChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29t bXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTEL MAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAl BgNVBAsTHlNlY3VyaXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz3 35c9S672XewhtUGrzbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonC v/Q4EpVMVAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhw Hyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCca dfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQE AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBMOqNErLlFsceTfsgL CkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8 AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g6 9ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR 50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkG A1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChO SUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNh Y2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAo YykwMzE1MDMGA1UECxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRh bGFuZXMxDzANBgNVBAMTBkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTla MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZp Y2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3Zl cmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNh Y2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfC Q2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6 PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST 2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n 5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8EBTADAQH/ MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYDVR0g BHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0 Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/ sXE7zDkJlF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPp qojlNcAZQmNaAl6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7Awa boMMPOhyRp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6 Un/10asIbvPuW/mIPX64b24D5EI= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNV BAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4g QXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5z dGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1Mlow gZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFy Y2ggSW5zdGl0dXRpb25zIENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNh ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0a e50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsm LIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD75O6aRXxYp2fmTmCobd0LovU xQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH3N6sQWRstBmbAmNtJGSPRLIl6s5d dAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNV HQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUw BoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3 DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p 6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8TqBTnbI6 nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD/md9 zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQx DjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEn MCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIw MloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYD VQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRo ZW50aWNhdGlvbiBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bE pSmkLO/lGMWwUKNvUTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW 1V8IbInX4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63 igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8 oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RH ILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8lEfKXGkJh90qX6IuxEAf6ZYGyojnP 9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4 RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U 5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/j Vo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbtifN7OHCU yQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyIWOYd iPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjR lwKxK3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2ryk OLpn7VU+Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2T lf05fbsq4/aC4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst 842/6+OkfcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VL kn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDz zFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7y FIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYD VQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQ UyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMC R0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9v dCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2 mfRC6qc+gIMPpqdZh8mQRUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkc hU59j9WvezX2fihHiTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE 2gfmHhjjvSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA 0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L6 8MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV HSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuy ZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2cGE+esCu8jowU/yyg2kdbw++BLa8F 6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5B uO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWh PBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/ rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN ZetX2fNXlrtIzYE= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UE ChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUg U2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN MDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul3 8kMKogZkpMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYc cjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d 5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9 bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z6+hsTXBbKWWc3apdzK8BMewM69KN 6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHu EhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZP V/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOz EmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQQa7y MIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93 d3cuc3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0 YXJ0IENvbW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0 eSwgcmVhZCB0aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENv bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG +EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkq hkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqn UCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/Jx XrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myzieb iMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MN q6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww 2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK 1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLmKhQxw4Ut jJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuEJnHEhV5xJMqlG2zY YdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdibD4x3TrVoivJs 9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UE ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRo b3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJ TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZb B7cgNr2Cu+EWIAOVeq8Oo1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe 3ikj1AENoBB5uNsDvfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSC b0AgJnooD/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr 7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq 42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxNnw3h3Kq74W4a7I/htkxNeXJd FzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ 85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0s AA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPI N93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud DwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K2s06Ctg6 Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbkJ4kd +MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w 6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9 mk47EDTcnIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1 dZxAF7L+/XldblhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6M anY5Ka5lIxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjR kcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UE CgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290 IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAb BgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIg Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1 aeTuMgHbo4Yf5FkNuud1g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXl zwx87vFKu3MwZfPVL4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FV M5I+GC911K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfg olXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkBarcNuAeBfos4Gzjm CleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T 3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1L PC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIH ZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVe e7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+Bi koL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h 9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462sA20ucS6v xOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EIosHs Hdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlq YLYdDnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6 OBE1/yWDLfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6w pJ9qzo6ysmD0oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYK beaP4NK75t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h 3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv 4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UE CgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290 IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAb BgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMg Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEG Mnqb8RB2uACatVI2zSRHsJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fk oF0LXOBXByow9c3EN3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOo TyrvYLs9tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX 0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux 9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6a ny2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5 GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon 74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3i iZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFM OVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/l b+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdVcSQy9sgL 8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+GuIAe qcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshA pqr8ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjEN SoYc6+I2KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr1 8okmAWiDSKIz6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2X cEQNtg413OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN 12TyUb7mqqta6THuBrxzvxNiCp/HuZc= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNV BAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lz dGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNz IDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzAp BgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQt U3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENs YXNzIDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3Z JNW4t/zN8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys5 2qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HM VDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6 tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0B AQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ 85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/ vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT 91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuImle9eiPZaG zPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYD VQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwf RUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNr LmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVF MSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0 aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLq I9iroWUyeuuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajm ofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAd TX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE1CV2yreN1x5KZmTNXMWcg+HC CIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E BAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUF BwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkw DQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQi ZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5uuSlNDUmJ EYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU3j2L rTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM dcGWxZ0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVT VCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQG EwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJh bMSxayAyMDA3MB4XDTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMM NlTDnFJLVFJVU1QgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPE sTELMAkGA1UEBhMCVFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBC aWxnaSDEsGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3 PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40 IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA 1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtyaKhUG9qPw9ODHFNRRf8+0222vR5YX m3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsif LfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0O BBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD AQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+IaE1KBiY3 iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OOXl0X rRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+M mNAKpoRq0Tl9 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYD VQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIg MjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUw EwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENB IDIgMjAwOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/W UEWJNTrGa9v+2wBoqOADER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23D EE0NkVJD2IfgXU42tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/ RcPHAY9RySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8 gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMB Af8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYD VR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRS VVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21i SCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10 cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZI hvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0o3/U37CY Aqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEVdT1B /yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYD VQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIg RVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRF MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAz IENBIDIgRVYgMjAwOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3 MKCOvXwEz75ivJn9gpfSegpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut 8Mxk2og+KbgPCdM03TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsT l28So/6ZqQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDY D8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB /wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9NteaHNxnMA4GA1UdDwEB/wQEAwIB BjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0 L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89 RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBo dHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2 XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp 3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05nsKtjHEh 8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lXANtu 2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjm JuVvw9y4AyHqnxbxLFS1 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRh ZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQG EwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQG A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMw QQYDVQQLEzpTdXBlcmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9u IEVsZWN0cm9uaWNhMSUwIwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4X DTEwMTIyODE2NTEwMFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRh Y3RvQHByb2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMt U2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQG EwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC ggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5P p6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6V zbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0v luYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg 353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2 0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH0quhJZb2 5uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqUtd+t FjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggm osvpr2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8E CDAGAQH/AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYt Ry0yMDAwNDAzNi0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSC AUcwggFDgBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0 b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJ BgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFs MTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25p Y2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmlj YWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2Iu dmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCG XgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8E bzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2NlcnRlLmdv Yi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLnN1c2NlcnRl LmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5odHRwOi8vd3d3 LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4SqT96QxtGG cSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+m vTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWu q2w1n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FT vZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRK hqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0 R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9o hri4zspV4KuxPX+Y1zMOWj3YeMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1 P93+hvS84Bpxs2Km -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAw BgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYD VQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0 aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYD VQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBD ZW50ZXIxRzBFBgNVBAMMPkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2Vu dGVyIEVWIENlcnRpZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEAm35z7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA// DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW 9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdp xWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmP MowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC7c+WXmPbqOY4twIDAQABo2MwYTAf BgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud DwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEF BQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/G VhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4WsZkJHwlgk meHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U05K2J RVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYD VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNh dGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4 MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTEl MCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Nj b20gUm9vdCBDQSAyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ 6HJaI2nbeHCOFvErjw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J 2HzFZ++r0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f 2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvL P+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK7 5MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTAtukxGggo5WDDH8SQjhBiYEQN 7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLa dkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+H io5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV 4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yP hOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0OBBYEFE0m ICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8TwuMA0G CSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2l ejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX +Ave5XLzo9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4Dooq zgB53MBfGWcsa0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/P s/8XciATwoCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07 qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlc CxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col 49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5wSsSnqaeG8XmDtkx2Q== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkG A1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmlj YXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0 MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Nj b20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3 aXNzY29tIFJvb3QgRVYgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3 HS9X6lds93BdY7BxUglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaV ylvNwSqD1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeF GHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin 5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQvidm5y8kDnftslFGXEBuGCxob P/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAGalNgHa/2+2m8atwBz735j9m9W8E6 X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqD J2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb 7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSna Fp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgEDMB0GA1Ud DgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbBbkUe 88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTw kLbUwp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/ UOGED1V7XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK 4/HsGOV1timH59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFh JpiTt3tm7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZ N5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwy VcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FH ZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNL MRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBD QSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkG A1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAX BgNVBAMTEENBIERpc2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQCqw3j33Jijp1pedxiy3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXK E5Pn7cZ3Xza1lK/oOI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMy EtztDK3AfQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7 JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3 Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKjrckWtc7dXpl4fho5frLABaTA gqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0e RWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmv TiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDy pVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/ MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNRxVgYZk2C 2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9BLxyE 04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK 5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGv xdpHyN85YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHC gWzN4funodKSds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQ jX2v3wvkF7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn 6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNL MRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBD QSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkG A1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAX BgNVBAMTEENBIERpc2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQCio8QACdaFXS1tFPbCw3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9 vgMsRfYvZNSrXaNHPWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwA FjxfGs3Ix2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4k LlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SO fW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912H9AZdugsBbPWnDTYltxhh5EF 5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYEkoopKW1rOhzndX0CcQ7zwOe9yxnd nWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhb hZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6IN fPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/ MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFMtCQSin1t ERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVVsRHF qQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QO y7W81k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kH bA7v/zjxmHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOG dGSVyCh13x01utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+ boE+18DrG5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3v QCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUND VlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAe Fw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQ MA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqG SIb3DQEBAQUAA4ICDwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPf mt4ftVTdFXxpNRFvu8gMjmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM38 02/J+Nq2DoLSRYWoG2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkX hBilyNpAlHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJ cRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eHk6fGioozl2A3ED6X Pm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/474KElB0iryYl0/wiPgL/AlmXz 7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE 3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbh dQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQAB o4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3Yu ZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2VuqB5TbM jB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyMHj+9 MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAA UgBhAO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUA IABUAGUAYwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4A IABFAGwAZQBjAHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUA KQAuACAAQwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUG A1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3Mv Y2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREE EDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7Uwo ZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTK FpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/ +QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA 9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH7ehVRE2I 9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5hI6zppSSMEYCUWqKi uUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1XgNce4hL60Xc16 gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew +f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbR D0tVNEYqi4Y7 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNV BAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwg Um9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRX MRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0Eg R2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zE booh745NnHEKH1Jw7W2CnJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvV avKOZsTuKwEHktSz0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XT P3VfKfChMBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWof wpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/ T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6m OL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/pyJV/v1WRBXrPPRXAb94JlAGD1zQb zECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJr nu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53 L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL 1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsnLhpNgb+E 1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M8VeG TslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRd gFlglPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92 a6O2JryPA9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/Zuepi iI7E8UuDEq3mi4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZz JBPqpK5jwa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIG A1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcN MDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEf MB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIP ADCCAgoCggIBAMK+6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3 t+XmfHnqjLWCi65ItqwA3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq /t75rH2D+1665I+XZ75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1 jF3oI7x+/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs 81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAg HNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzT jU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMusDor8zagrC/kb2HCUQk5PotT ubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7Rc We/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUB iJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB /wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjAN BgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx0GtnLLCo 4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfWpb/I mWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KF dSpcc41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrE gUy7onOTJsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQ mz1wHiRszYd2qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfuj uLpwQMcnHL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRS MQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtu b2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlm aWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9y aXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8w DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xv amlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWth c3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq98 99SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0b QNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSFQ9OArqGIW66z6l7LFpp3RMih 9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+gElIwcxmOj+GMB6LDu0rw6h8VqO4l zKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3 fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2o MoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QO XVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+LznrFpct1pH XFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5dUyQ 5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQD AgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd 0dCrfOAKkEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/ u6Au/U5Mh/jOXKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1 Q9Jauz1c77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 +GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5 TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4 R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDY wKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186 zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9 I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNV BAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lz dGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNz IDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzAp BgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQt U3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENs YXNzIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl 82hVYAUdAqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcx lkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1q lVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZwI18gfNycJ5v/hqO2V81xrJv NHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0B AQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSp p+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joi fsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN9noHV8ci gwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRv cyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3 MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3Qg MjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQCVhTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI41 9KkM/IL9bcFyYie96mvr54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+ yj5vdHLqqjAqc2K+SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFs Q/H3NYkQ4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMB AAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/ MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgGA1UdIAQRMA8wDQYLKwYBBAGw LQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4G kGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0 BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQP OLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYV qL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDEL MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1Zh ZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJ BgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRp cyBSb290IENBIDEgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjuny bEC0BJyFuTHK3C3kEakEPBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/ gpqG7D0DmVIB0jWerNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOG MAqNF34168Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh 4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5 cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnA AZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2Y fF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVd YdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7 a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfn kduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOCMTaIzen7 xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3GPoa jOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvr iBbP+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCk eF9OrYMh3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ +p6Q9pxyz0fawx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTD vdbJWqNjZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwS tIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDEL MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1Zh ZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJ BgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRp cyBSb290IENBIDIgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjc V4g/Ruv5r+LrI3HimtFhZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WV HhLL5hSEBMHfNrMWn4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs +L5u+9ymc5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8M SPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPj EiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKqIcGY5jDjZ1XHm26sGahVpkUG 0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIh O4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoos FCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4 r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66AarHakE7 kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7KpVMN qT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9 sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDb Il9qxV6XU/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+ D77vfoRrQ+NwmNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpn IdsPNWNgKCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0Z iC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDEL MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1Zh ZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJ BgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRp cyBSb290IENBIDMgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47q FJenMioKVjZ/aEzHs286IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O 2YIyC0TeytuMrKNuFoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMB OSBDGzXRU7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f +IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCT ZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzweyuxwHApw0BiLTtIadwjPEjr ewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqiMd5mBPfAdOhx3v89WcyWJhKLhZVX GqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUC f+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/J xHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3pxKGmPc+FS kNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzSt/Ac 5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2Nn L9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE 8/nxoGibIh6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8 XgBCH/MyJnmDhPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H 6QrG2vd+DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDY WGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYD VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIw MDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQg SW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1 cmVkIElEIFJvb3QgRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82 ckmIkzTz+GoeMVSAn61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxN EP4HteccbiJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO7 04gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8 p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQF MAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTOw0q5mVXyuNtgv6l+vVa1lzan1jAN BgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTU iaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LR dWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70 CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwoIhNzbM8m 9Yop5w== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t MSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAw WhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk IElEIFJvb3QgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0F FfLvC/8QdJ+1YlJfZn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+ CW7if17QRSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBk AjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2 U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv6pZjamVFkpUBtA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYD VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBa Fw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBS b290IEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/ RrohCgiN9RlUyfuI2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxps MNzaHxmx1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F 8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9 RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G A1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcN AQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVn NeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2Z L7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUT Fy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTflMrY= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t MSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0z ODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAX BgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290 IEczMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu8 0JX28MzQC7phW1FGfp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6I p6FrtUPOZ9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/ EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q 3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8sycX -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYD VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAw WhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVk IFJvb3QgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAi MGkz7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/W BTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+ EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1 EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADk RSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+ 9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m8 00ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn1 5GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQADggIBALth 2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYYZhsj DT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXIN wBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfR nGTZ6iahixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhV Mt5xSdkoF1BN5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbS pKhil9Ie4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIVi HTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq 6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYD VQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmlj YXRpb24gQXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAw MDFaMFUxCzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UE AxMhQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEF AAOCAg8AMIICCgKCAgEAvcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4 uEBf2zmoAHqLoE1UfcIiePyOCbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxII FgsDcSccf+Hb0v1naMQFXQoOXXDX2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2 ZjC1vt7tj/id07sBMOby8w7gLJKA84X5KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34F Mr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR+ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGy Zxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ezEC8wQjchzDBwyYaYD8xYTYO7feUapTeN tqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqklWJqbrDKaiFaafPz+x1wOZXzp26m gYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK28jHAPwQ+658geda4BmRkAjHX qc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVYyrREgk/nkR4zw7CT/xH8 gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0CAwEAAaNCMEAwDgYD VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R8bNLtwYgFP6H EtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1LOJwXcgu 2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXqT2r0 9Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG 6kQC2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wu cPrXnbes5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAd BtaP4/tIEp9/EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/ kWjFgGcexGATVdVhmVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+ J7x6v+Db9NpSvd4MVHAxkUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHj XEa7ZywCRuoeSKbmW9m1vFGikpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYD VQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mA muagueivgeS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYT AkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC5 6K+B5LmmMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYG TufQdDTc7WU1/FDWiD+k8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqo GXqW5pWOdO2XCld19AXbbQs5uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+ jJZSEExfv5RxadmWPgxDT74wwJ85dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnk UkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz0 3jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFyb7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vl rdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUP LK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m+Jzr5dVjhU1zZmkR/sgO9MHHZklT fuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6yke6rCzMRh+yRpY/8+0mBe53 oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacXGKUN5AXlK8IrC6KVkLn9 YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w HQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUAA4ICAQBqinA4 WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6yAa+Tkvv /vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iYr83d 2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6e FN0AkLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KN PQx96N97qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOG G0jfKq+nwf/Yjj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7D lfEvr10lO1Hm13ZBONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Le ie2uPAmvylezkolwQOQvT8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLB sX5VYc8T1yaw15zLKYs4SgsOkI26oQ== -----END CERTIFICATE----- UWVuSd$4$} 4$$x MtHEĉ$Uă1t $D$4$M4$Ee[^_]Ẻ$EGGMĉMD$ED$$E$$D$ }D$E<$D$Eă<$D$Eă<$D$Eă4$D$UE$'t&Eĉ$EEăA&$EGD$E$Eă$E@@MG @O $UG1t$G$|$D$|$D$G$G$E4$D$MD$ UWHVS$<$u <$$Nx$tP4$41t $D$<$U<$Ee[^_]vX$,,$$(@ NF40($L$VmFD$0$4$FvFD$0$4$~`F($L$X~FD$0$4$ ~FD$0$4$~F$<$~:F D$D$$Dž8$1D$$‰$Qt$ D$$D$D$$Ƌ=$D$D$ D$D$4$D$ 8D$L$ T$4$D$E8$ ‹4$L$ D$T$D$t&0D$ D$ 4$D$44$D$44$D$4D$,$U,$0$4zt&~nFƒ$vƅ1҉ $$$4$8:w't$Dž811ҋ($D$L$P1t $D$,$M$4$0440$4qt&0$4t&Dž8$hD$t$ t$0D$ D$4$44$D$44$D$4v0$4t&0$4t&0$4>t&0$4t& 0$4|t& $1ƅ$$PzK@ 8$$ƅUWHVS$$u ,<$$~xt^4$41t $D$,$M,$Ee[^_]t&X$(($$$ NF40$$L$VUFD$0$4$FFD$0$4$~0F$$T$@~FD$0$4$ ~MFD$0$4$~F$<$~F D$D$$Dž8DžD$4$$sZD$D$ D$$dD$4$$D$D$ D$D$<$D$J8 D$D$L$<$T$ 8$‹<$T$D$ L$D$  4$$<$88r't$Dž811ҋ$$D$L$P1t $D$($U$xt&0D$ D$ <$D$4<$D$4<$D$4D$($M($ 0$4t&4$04D0$4t&0$4at&0$4Ht&0$4t&0$4t&0$4Dt&Dž8$hD$t$0 D$ t$<$D$4<$D$4<$D$4D$($Mt&~Fƒx$B&D$ D$D$$t$$ƅ 0$4Lt&ƅ1BfD$ D$D$$qv4$1ƅ$D$ D$D$$t=|$$<$t&Pz{@ h<$UWEVSd$$E<$$U x} wUtMEĉ$Uă1t $D$E$UE$Ee[^_]$@@EA A@EĉEtXuD$ED$ 4$D$Eă4$D$Eă4$D$EăAt&E H1E @ƒu@@xẺ$EE @tE @D$ED$$2_vwJE$$t$u׋%W OGUMEu‹MUVL$D$<$UBVED$UUD$$UB E F @D$E$Uă1t$UU}UG$|$D$|$D$G$G$UET$$uE$&E$Eă|f}D$ED$ <$D$Eă<$D$Eă<$D$EăD$E$UjE$EăUW}VSd$<$<$$M x MM QtJEĉ$Uă1t $D$<$u<$Ee[^_]v$U@ƋU@F F@(E @E MĉM@$E eH E @$EUFD$ D$T$$EԉD$F$EE F @D$E$Uă1t$UUF$t$D$Ut$D$F$F$U<$T$M&EĉEuD$ED$ 4$D$Eă4$D$Eă4$D$Eă<$D$MPE @D$E$Eă$EE @E @D$E$Eă$EFMEED$ $D$UBVUUB D$F@ $fE$EăfE$EăQfE$EăfEĉ$EEăaUWVuSd$ĉ4$}4$$xtGEԉ$Uԃ1t $4$D$4$e[^_]t&E PJytWD$ $P t'9J tR$EE@ @Eԉ$bB tPzu@맍v  B P UWVuSd$ĉ4$4$$M xQtLEԉ$Uԃ1t $D$4$}4$Ee[^_]t&E @Hyt^D$$UUЉDž~ZE @E Uԋ@$UUЄu4t41A tH1yuxUԀuY$Uԃ1t $D$4$Mt&Uԉ$UEԃU\t&D$ <$UUUWVuSd$ĉ4$4$$M xQtLEԉ$Uԃ1t $D$4$}4$Ee[^_]t&E @Hyt^D$$UUЉDž~ZE @E Uԋ@$UUЄu4t41A tH1yuxUԀuY$Uԃ1t $D$4$Mt&Uԉ$UEԃU\t&D$ <$UUUWVuSd$ĉ4$} 4$$x Mu7GPJytqD$$NjG$tsG Eԉ$Uԃ1t $4$D$M4$Ee[^_]fz tGxulG$u}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ_& UWVuSd$ĉ4$} 4$$xtKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&GHyD$$UUЉǀ G@ $PI$UD$EЋG@ $U̍EԋMD$ T$$L$MЃ}ԉ $|$4$M-y _Gxu` S}ԍT$D$ D$<$Eԃ<$D$Eԃ<$D$Eԃv  UWVuSd$ĉ4$} 4$$xtKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&GHyD$$UUЉǀ G@$PI$UD$EЋG@$U̍EԋMD$ T$$L$MЃ}ԉ $|$4$M-y _Gxu` S}ԍT$D$ D$<$Eԃ<$D$Eԃ<$D$Eԃv  UWVuSd$4$4$$M xytLEĉ$Uă1t $D$4$}4$Ee[^_]t&E @PJytFD$$E~PE @E }ċ@D$$-B EtƋPEzu@E}ċEEu9<$L$ D$D$}ă|$4$}$@MEL$MP Eԉ$D$UU$EԋUMƂD$EL$ <$D$E}ĉ$q}ĉ<$EăUWVuSd$ĉ4$} 4$$xtKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&GHyD$$UUЉǀ GUЉ$UЅG@$PH‰ $MD$EЋG@$M̍EԋUD$ L$$T$UЃ}ԉ$|$4$Mvy GGxup ;}ԍD$ }ԍD$ T$D$<$Eԃ<$D$Eԃ<$D$Eԃv  UWVuS$d4$} 4$$x MOtJE$U1t $D$4$}4$Ee[^_]vGP|Bx|D$x$x€z(6GSG}}D$E|$ED$$|tJ E $}D$|$x|| $txB(D$ E|$D$E$E4$D$MfR BxusRz(}D$ED$ <$D$E<$D$E<$D$sDžtEEv( &|E$EE|UWVuSd$ĉ4$4$$M x}  }tJEԉ$Uԃ1t $D$4$M4$Ee[^_]vBxttD$ $MMȉẼ}ty}ԍL$D$ D$<$Eԃ<$D$Eԃ<$D$EԃYfP UtBExuB}EuE @E }ԉ}Ћ@D$ D$D$$D$EȋE̋@$ED$ @$<$Uȉ$EЉ$Uԃ1t $D$4$}{vEԉ$EEԃ8&EЉ$뤍v<$EЉ$ UWVuSd$ĉ4$} 4$$xtKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&GHyD$$UUЉǀ G@ $PI$UD$EЋG@$U̍EԋMD$ T$$L$MЃ}ԉ $|$4$M%y WGxu` K}ԍD$ T$D$<$Eԃ<$D$Eԃ<$D$Eԃv  &}ԍD$ UWVuSd$ĉ4$} 4$$xtKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&GHyD$$UUЉǀ G@ $PI$UD$EЋG@$U̍EԋMD$ T$$L$MЃ}ԉ $|$4$M%y WGxu` K}ԍD$ T$D$<$Eԃ<$D$Eԃ<$D$Eԃv  &}ԍD$ UWVXS$$4$} 4$$x @tOD$D1t $D$4$M4$Ee[^_]fGPJyD$$DžThD$D$T$<<@<$D$ T$D$D<$D$D<$D$D4$D$}z AGxu0DžT t&G $<$TD$&E<$D$ED$ t&<$Eă=t&<$EăRt&D$ UWVuSd$ĉ4$} 4$$xOtHEԉ$Uԃ1t $4$D$M4$Ee[^_]UЅ~G$UЄug}f}ԉ<$UЃT$D$ <$D$Eԃ<$D$Eԃ<$D$Eԃ[fPJytrD$ $‹G~vG}ԅUЉ$UЅtt$UЉBD$B $<$t&J tA1ҀxuQ뉍UЍ}ԉ<$EԃUtt&1UWVuSd$4$} 4$$ẺyEtKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&OGUԉUЋM̉$L$GPJyD$$EȋWGD$EЉ$Eԃ$EGGD$EЉ$Eԃ$NjEȋ@$EfED$|$D$ ED$Eȋ@$Eȋ@$xI<$D$‹EȉU@$|$D$ ED$EȋE$EȋU(Ẻ|$$D$UUЉlj$W1t $D$4$U;t&Eԉ$EEԃK&B EȨvPEzb@EWv}ЍD$ED$ <$D$Eԃ<$D$Eԃ<$D$EԃCt&EЉ$Eԃ"fEЉ$Eԃf$}ЍD$ED$ <$D$Eԃ<$D$kt&}ЍD$ED$ <$D$Eԃ<$D$Eԃ<$D$E$E}ЍD$ED$ <$D$Eԃ<$D$Eԃ<$D$UWVuSd$4$} 4$$x MOMtJEĉ$Uă1t $D$4$M4$Ee[^_]vBHyttD$ $ƒ}EĉEtv}D$ED$ <$D$Eă<$D$Eă<$D$EăW@ tH1ҀyuP}EĉEuOGl@@\GGD$}D$<$U<$UD$B $E$t;Uă1t $D$4$M<$fvEU$EăU[t&EU$EăU UWVXS$$4$4$$U x @M ItQD$D1t $D$4$}4$Ee[^_]t&BxD$ $88D$ t&D$ D$ E$$T$uEE$EHE$$T$u‹E$$T$u뚋E$$T$u oE$$T$ut&?E$$T$ut&E$$T$ut&E$$T$ut&E$$T$ut&D$ FUWXVS$<$u <$$y8FED$E$ED$E$Eă$EE$UMD$ $T$L$EE$MUD$ $L$T$EẺ$EOGD$ED$$E$$EMU$9Et*E$%UE $EMD$D$D$ D$D$E$MEL$$MUED$L$ $D$D$D$UMƂ $E$GD$4$ME$|fB EPEz@EEĉED$ }D$E<$D$Eă<$D$Eă<$D$EăEĉ$EEă9&D$ 녋E$EăE&E$EăEGt&E$EăOƒt(~SWvD$ t&@@ƍE$Eă5fE$EăfE$EăED$D$$E$E$}D$ED$ <$D$Eă<$D$Eă<$D$EăE$Eă)fE@@@@vED$D$$E$T$UWVuSd$4$4$$} x MtME$U1t $D$4$M4$Ee[^_]BHyttD$ $EEtv}D$ED$ <$D$E<$D$E<$D$EU@ tP1ɀzuHEEuE @8E @ƒf@M@SẺ$EE M@pE @}D$D$<$M<$UЋMD$T$A $F@ E$]$EUED$D$s$D$ UEčML$ L$@D$Eȉ$EED$E$EȋUH;Y$E}D$ D$E<$D$E<$D$E<$D$E4$D$UEP;E$vE$EM}&E$U1t $D$4$U뙍t&D$$D$E$EM$EMt&t^H1$EȉD$t9x $ED$UUoHyx롋x}xEUSd$ vt tD$$D$D$ $d$[]UWVSd$ċD$TD$ D$D$$t$PD$(D$(4$D$D$,tB$T$dž$t&|$ D$D$4$t`D$TD$ D$D$$u t?D$,D$($D$,d$<[^_]Í<$D$,ύ%lu븍&D$D$ D$$D$ D$,D$,d$<[^_]UWVXS$D4$4$$M x:PytTT$T1t $D$4$}4$Ee[^_]&BHyt|D$ $ƒtTD$PD$ <$D$T<$D$T<$D$TKH tA1ҀxuQuE @E T@LL`D$HB $HL $LuM<$D$PD$ D$T<$D$f<$T1t $D$4$MULT<$TL$hD$T$LLPD$ <$T$D$T<$D$T<$D$TEt&<$uUWVSd$}x e[^_]fE D$$E D$$te1[^_]Ít&E D$$uۍE؉$ƉE4$$EЍuD$<$D$EED$ 4$D$EЉD$Eԃ4$D$MEԋI4$EĉL$EЃUԍD$ D$4$L$UEăUD$ D$Eԉ$D$Eȉ$E(UWVSd$u~e[^_]fu U1tE؉$ljE<$$Et$@,$P!MEEĉEQ$T$EăEEu E$$EUED$D$s$D$ UEԋL$ @|$D$E$EăD$E$D$EMD$ |$$MEăMD$ D$EL$$U$v1E$e[^_]É|$D$ED$ $EăD$E$Eă|$D$ EEL$$ED$ D$EĉD$E$[UWVuSd$4$4$$xE PJyD$ $lj<$G,$D$$$EEԉEEԉ<$D$UEċMD$ T$$L$M}ĉ $|$4$M4fEĉ$Uă1t $D$4$M4$Ee[^_]z Gxu$, t&Eĉ$Uă1t $D$4$}{UWVuSd$ĉ4$4$$U x MtHEԉ$Uԃ1t $D$4$M4$Ee[^_]BHyt\D$ $lj<$G,t^$$G,$x tGxuT<$G,uEЃ8P(tEԉ$Uԃ1t $D$4$}$, t&}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ낍}ԍD$ D$EЉ<$D$Eԃ<$D$EԃQEЃ8P(2Eԉ$}ԍD$ 띐t&}ԍD$ 념t&}ԍD$ jf}ԍD$ Rf}ԍD$ :f}ԍD$ "f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ zf}ԍD$ bf}ԍD$ Jf}ԍD$ 2f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ f}ԍD$ rf}ԍD$ Zf}ԍD$ Bf$}D$ (UWVuSd$4$4$$U x:tKEԉ$Uԃ1t $D$4$}4$Ee[^_]t&BHyXD$ $$EEЋ@,d$TEȍEԉ$EUȃMԉ$UĉMD$EЉ|$D$ $Eԃ|$D$ EȋEЉL$$EȃMD$ D$Eԉ $D$Uĉ$D$EЉ|$D$ $Eԃ|$D$ EȋEЉT$$Eȃ}D$ D$Eԉ<$D$|$4$}@ Pzu @t&$, t&Eԉ$Uԃ1t $D$4$MUWVS$D$\4$$U x:pt_t$t1t $D$\$u\$Ee[^_]BHy@ D$ $Ɖ4$V,ti$ljltXF,$`$Ƌ`$D$D$ D$4$|hL$ D$D$s4$|plT$ @L$<$D$pD$lD$ L$$ttD$ |$D$X$D$ D$D$4$`$D$D$ D$4$hD$D$s4$D$ |lT$ @<$D$pD$D$pD$ tD$l$tD$ |$D$X$D$ D$D$4$`D$D$U<$<$D$D$D$ D$4$hD$D$s4$D$ |lT$ @<$D$pD$D$pD$ tD$l$tD$ |$D$X$D$ D$D$4$`$$dNjd@4$TD$hD$D$s4$D$ |lT$ @ $D$pD$tlD$ dp $T$D$dXD$ D$t$D$D$ D$D$4$G4$D$hD$D$s4$T$ |lT$ @ $D$pD$tlD$ dp $T$D$dXD$ D$t$D$D$ D$D$4$T $<$`@4$D$h4$D$D$s|$ |lT$ @<$D$pD$lD$pD$ $D$tXt|$$D$ D$4$D$ D$D$`@@4$D$h4$D$D$s|$ |lT$ @ $D$pD$lD$ptD$ $D$t|$XD$ D$<$4$D$T$ `t$$`D$ D$D$~$h}p1D$D$l$tTdd1@󫋅ht$$dD$ D$D$<$p|$lD$ D$<$pt$tD$l$tD$ |$D$T$h$94D$h$D$ D$pD$l$TD$ D$tD$X$`$X|t&p Fx'vt&Dž0123Dž4567Dž89ABDžCDEFƅ Rhljdf@:ʃP P9u΋dƄhpD$ D$l|$$D$l|$D$ $ttD$ t$D$X$$, ƅhR $UWVuSd$4$4$$NjE MM QUtMEĉ$Uă1t $D$4$}4$Ee[^_]PJyD$ $EE$EE HE @уMMĉM}|$$<v'}D$ED$ <$D$Eă<$D$Eă<$D$Eăt&B E8PEz$@EvEĉ$EEăЃE P@|$$</E PiE @EE|$$uuD$ }D$E<$D$Eă<$D$Eă<$D$EăD$4$MEĉEt&ED$E$Eă$@$EUNjED$ T$<$D$D$E$D$}<$EUET$U@,$UE$EtKE$Uă1$E$EăE&}D$ED$ <$D$Eă<$D$t&B@vE$Eă fD$ t&E$(UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE PJytD$ $lj<$G,t$D$ D$D$$uOEԉ$Uԃ1t $D$4$}XB t!Pzu x끍vEԉ$믍vg$, UWVuSd$4$4$$U x MtHEԉ$Uԃ1t $4$D$}4$Ee[^_]BHyD$ $lj<$G,$MԉMtrWD$Ẻ $D$ D$UEԃD$ L$EċMЋẺ $D$EăUD$ D$Eԉ$D$G,t $t0EЉ$P t(Bxu'z4&EЉ$$, UWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE PJytoD$ $lj<$W,t$G,Eԉ$Uԃ1t $D$4$}mt&B tPzux둍v늍t&$, UWVuSd$4$4$$U x:tKEĉ$Uă1t $D$4$}4$Ee[^_]t&BHytTD$ $$EExHu]P1t $D$4$M뎍&@ tPzu@몍v$H vUԉT$UЉT$@,$EЅt(MԍUĉD$|$L$ $EăqvEĉ$UWVuSd$4$} 4$$yEЉUȋWUtMEԉ$Uԃ1t $D$4$M4$Ee[^_]EЋPBxED$Mă $MĉEЋEЉMĉ$WMą*G}ԉEċE̅EĉL$$EЋ@ t$E@ Eĉ<$D$Uԃ1t$MЉA <$Uԃ1t $D$4$}B EШ,PEz@E vD$ D$Eȉ<$D$Eԃ<$D$Eԃ<$D$Eԃ\M}ԉ<$EԃMEUWVuSd$ĉ4$4$$xtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vE PJytGD$ $lj<$HtEGt>$D$4$}됋B t1Pzu0x<$HuEԉ$8&뒍t&$H UWVuSd$4$} 4$$x M̋OMtJEԉ$Uԃ1t $D$4$M4$Ee[^_]vBHyD$ $EЋEЉ$WlG}ԉEċEȅEĉ$EЋ@t$E@<$Uԃ1t$MЉAD$Ẻ<$D$ D$MЃEԋQ<$ẺT$EăD$ D$ẺD$Eԉ$<$f@ EШPEz@Ev<$D$ED$ D$Eԃ<$D$Eԃ<$D$Eԃ4$D$}G&}ԉ<$EԃEUWVuSd$ĉ4$} 4$$x M̋OMtJEԉ$Uԃ1t $D$4$}4$Ee[^_]vBHyD$ $‰$UWҋUO}ԋEЉUȅ~z $MMЄUte1t $UUЉB D$B,$<$%t&@ xH1ҀyiPat&D$ D$Ẻ<$D$Eԃ<$D$Eԃ<$D$Eԃ4$D$M&}ԉ<$MԃUUWVuSd$ĉ4$4$$U x:tKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&BHyttD$ $$EED$ D$D$ @$$D$Uԉ|$$Eԃ4$D$}h@ tPzu@늍v$$ UWVuSd$ĉ4$4$$U x:tKEԉ$Uԃ1t $D$4$M4$Ee[^_]t&BHyttD$ $$EED$ D$D$ @($D$Uԉ|$$Eԃ4$D$}h@ tPzu@늍v$( UWVuSd$4$4$$U x:}tHEԉ$Uԃ1t $4$D$M4$Ee[^_]BHyD$ $lj<$G,$G,H$tsD$E̍D$D$ <$D$M̋}ЍEԉL$|$$Eԃ:P tPBxuOzl&D$E̍D$D$ <$D$M닐t&&$, t&MЍED$L$]UWVuSd$4$}4$$EEȋG,$EЍMԋG $M̉D$}ԃEEu4$e[^_]ÍvẺ$Uԃ1t $EЍED$ T$D$Ẻ$EЃ<$D$ D$EԉD$4$e[^_]Í&Ẻ$Uԃ1t $EčED$ T$D$Ẻ$EăD$ <$D$EԉD$fEUVSd$t$ FFD$F D$@$$D$ D$B$$D$$F t$F d$[^]UWEVSd$U$}EU4$$EUzzJH)9Fz uu σ1ɨuBErroBJ9_B <t$uIz,ry9s΍|}|9 0}9sMI wtM9wBuĉ4$UEăU<$EET$D$@4$D$E}ċD4$D$Eă|$}D$ D$<$U}ԋ@4$D$E}ċ4$D$EԉD$ED$|$D$ E4$D$v'uE$e[^_]It&f2ۍvt&vJ Ex<w9AIBBȉB=Gv1LEyBB @ɃJ뻍U7vy'9|&vfO+vvGEUWVuSd$4$4$$‹E z@EtGEĉ$Uă1t $D$4$}4$Ee[^_]E Hy#D$ $UUlj<$UE PҋUE HEĉEE $T$MMtxEL$M$Eă$MEEL$$Eă$UEԍE$T$D$WLt$EEGLG0$E$Uă1t $D$4$Mt&A H1yxt&UEĉ$EMăUUW}VSd$<$<$$u E yŰVUtMEԉ$Uԃ1t $D$<$M<$Ee[^_]Pr~hD$ $MMĉEЋEЉMĉ$Mă}E @SE pEԉL$Eȉ4$aEȉt$$Eԃ$EEȉt$$Eԃ$EċE xE @E$ƋE xE @$9uU)9UuzHlMЃy4_D$EЉt$0$ƋẺt$D$Eȉ$Eԃ<$D$Urt&B EШPEz@EvMčEԉ$EuԃMĉ4$L$D$ fD$ uȉD$Ẻ4$D$Eԃ4$D$Eԃ4$D$Eԃt&uԉD$ED$ 4$D$Eԃ4$D$Eԃ4$D$릍vD$EЉt$@$$MЉƉD$ D$A$ $D$EЉ$qEȉ$EԃfEȉ$EԃUW}VSd$<$<$$u E yŰVUtMEԉ$Uԃ1t $D$<$M<$Ee[^_]Pr~PD$ $MMĉEЋEЉMĉ$Mă})E @;E pEԉL$Eȉ4$IEȉt$$Eԃ$EEȉt$$Eԃ$ƋE xgE @$EċE x^E @$E;ur +u9D$ uȉD$Ẻ4$D$Eԃ4$D$Eԃ4$D$Eԃ{&B EШPEz@EvMčEԉ$EuԃMĉ4$L$D$ C&EЋ@,$EЀxH\EЋ@,$D$D$D$ED$ $yẺt$D$Eȉ$Eԃ<$D$Uzt&uԉD$ED$ 4$D$Eԃ4$D$Eԃ4$D$ED$EEĉD$EЋ@,$D$D$D$ED$ $EЉ$Ẻt$D$Eȉ$&Eȉ$EԃfEȉ$Eԃf@,$D$D$D$ED$ $UWVuSd$4$4$$NjE M̋M QUtMEԉ$Uԃ1t $D$4$}4$Ee[^_]PJy`D$ $EЋEЉ$}E @WE @EčEԉEȋEĉ|$$!}ċEȉ|$$Eԃ$EEȉ|$$Eԃ$EċE xE @E$NjE xE @$9}r U)9D$ }ȉD$Ẻ<$D$Eԃ<$D$Eԃ<$D$Eԃ4$D$M|&B EШPEz@EvEԉ$EEԃEt&D$}EЉ|$@($UЉljD$ D$B($D$EЉ$Ẻ|$D$Eȉ$,&}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ4$D$UYt&D$ pt&Eȉ$Eԃ-fEȉ$EԃUW}VSd$<$<$$u E yŰVUtMEԉ$Uԃ1t $D$<$M<$Ee[^_]Pr~PD$ $MMĉEЋEЉMĉ$Mă}E p;E pEԉL$Eȉ4$IEȉt$$Eԃ$EEȉt$$Eԃ$ƋE xE @$EċE x~E @$E;ur +u9"uȍD$ED$ 4$D$Eԃ4$D$Eԃ4$D$Eԃ{&B EШPEz@EvMčEԉ$EuԃMĉ4$L$uȍD$ED$ 4$D$Eԃ4$D$Eԃ4$D$Eԃ<$D$UEЋ@,$tJEЀxH0EЋ@,$D$D$D$ED$ $x[ED$EEĉD$EЋ@,$UD$1t$D$ D$EЉ$EЉ$Ẻt$D$Eȉ$St&uԉD$ED$ 4$D$Eԃ4$D$Eԃ4$D$Eȉ$EԃlfEȉ$Eԃuf@,$D$D$D$ED$ $UWVuSd$4$4$$U x MtHEԉ$Uԃ1t $D$4$M4$Ee[^_]BHyD$ $lj<$G,$D$E̍<$D$D$ D$<$}ЍEԋỦ$|$T$EԃDvx tGxu qt&$, t&Eԉ$Uԃ1t $D$4$}USd$D$ |$$D$u"T$@ $d$[]ÍT$@ $d$[]UWVuSd$4$4$$M xUQUtJEĉ$Uă1t $D$4$U4$Ee[^_]v$P@@G GG@GGG 0G4G@GD$HGt<$1t $MAE @<$e[^_]Ðt&|$D$ D$E @8D$E @<$>$1t$MG$D$uFE @<1$e[^_]Ð(뙐t&UW}VSd$E<$p<$$$MЉt$L$EEEMEUĉU$EL$UEċJUEL$$MEUL$D$ MċED$$L$D$t4$4$<$e[^_]UWVuSd$4$4$$EE yEE @E~}}čD$ D$E<$D$Eă<$D$Eă<$D$EăD$4$M4$Ee[^_]Eĉ$Uă1t $D$4$U뷍t&rE @$8E @fE @$=?q$@EUǹ1}$}}UG  `\ %*/5;TB@GJN`TPZ`ePl quzH܉t`\\xph,P@` `'|/7<(BGL@QV\bjr|wP}\xPȷ`$,T<t  D"$(,27h=|E8KRV[c4ixnDs{ 8LdXxP88|T"(-39GLT\dlvD~T$@PJ `P V \ c j q x ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM546|p&ܲ`&Fuv=7S8/A0jS'1'Z>ϛDlԻG%K3 QQ+ׯBo7ҿYK2rnt^p/F @1 Y#z~6̈EXZK+AT̏m~H^7ৗ(ՋvP=̱\V.28n<h>f?H`-[ ttmYto8w|2ߌؾs1;2tG%vk$f:cZh4#t+x#e-"".|W#4sdl0kKȆ/Kyh3[:+jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM546|p&ܲ`&Fuv=7S8/A0jS'1'Z>ϛDlԻG%K3 QQ+ׯBo7ҿYK2rnt^p/F @1 Y#z~6̈EXZK+AT̏m~H^7ৗ(ՋvP=̱\V.28n<h>f?H`-[ ttm@$ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM541ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K :ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZhڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl#s'ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQSڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB:6 $GCC: (GNU) 4.9.x 20150123 (prerelease)zR| (0BAB CxAAA  \-AB AgA 0fAA AO PA AA(\AB CRAAA (,AA O X AA( ,AA O X AA,8AB BDAAA <hxAB BM AA D L AA B MAA ,_AB C AAA E 8AB C CAA E XCAA hAA AAO0x AA AAA K AA AAA | CA AAF <AB C AAA B w CAA D 0AB AE AAA H ,AB C AAA E ,$AB EC~ AAA D ,TAB BDu AAA G ,AB C AAA H ,AB C AAA H ,AB BDu AAA G $XAB BPAA  </AB AiA @`|AB Az A A ^ A A J A E JA ,qAB C AAA D 0LAA AO vA AA$AB B{AA $0AB BxAA $XAB BxAA $AB B{AA $AB BxAA $AB B{AA $lAB BdAA $ ~AB BvAA $HAB BAA $pAB BAA $AB BAA $AB BAA $AB BAA $AB BAA $8AB BAA $`AB B~AA $AB BAA (AB B AA D (AB B AA H ,4AB BDn AAA F ,84AB BDn AAA F ,h4AB BDn AAA F ,7AB BDn AAA F ,4AB BDn AAA F ,EAB BDn AAA F (( HAB B* AA G (T PAB B2 AA G , [AB BDx AAA D , AB AH AAA F , AB HC AAA H , AB EC AAA C ,@ AB AE~ AAA F ,p AB BDm AAA G , AB BDt AAA H , AB BDt AAA H , GAB BD AAA E ,0 AB BDu AAA G ,` AB BDu AAA G , AB BDt AAA H , AB BDu AAA G , eAB BD~ AAA F , HAB BD~ AAA F ,P AB BDu AAA G , AB BDu AAA G , AB BG AAA E , AB BG AAA E , AB BD AAA D ,@ AB BD AAA D ,p 1AB BD~ AAA F , dAB BDz AAA J , AB BD} AAA G ,AB BD AAA D ,0AB BD~ AAA F ,`AB BDz AAA J ,EAB AE AAA D 0AB AE AAA J ,AB BDn AAA F ,$AB BD AAA I ,TAB BD{ AAA I ,AB BD{ AAA I ,AB BD AAA D ,AB BDx AAA D , AB BD} AAA G ,D4AB BD~ AAA F ,tAB BG AAA G ,4AB BD~ AAA F ,AB BG AAA J ,}AB BD AAA H ,4 AB BG AAA E ,dAB AH AAA J ,AB BD AAA J ,AB BD AAA D ,AB BD AAA D ,$AB BD AAA D ,TAB BD AAA D ,AB EC AAA I ,AB EC AAA F ,AB AH AAA J ,AB BD AAA D ,DAB BD{ AAA I tKAB AEA 8AB C AAA G oAAA ,AB BG AAA J 8AB C\ AAA C p AAA E <@[AB Cd AAA C  AAA A 0AB BD@ AAA D ,AB BDx AAA D ,_AB BDu AAA G ,({ AB HC AAA I ,X AB BD AAA I ,SAB BDn AAA F ,AB BDx AAA D ,3AB BDn AAA F ,pAB BDu AAA G ,H/AB BD AAA I ,x-AB BDn AAA F ,QAB BD~ AAA F ,AB BD~ AAA F ,3AB BDu AAA G ,83AB BDu AAA G ,hAB BDx AAA D <AB BD AAA D u AAA H $AB ByAA 0lAB EC) AAA A ,4AB BDy AAA C ,dAB AE AAA I ,+AB AE AAA I ,nAB BD AAA I ,KAB AE AAA I ,$AB BDx AAA D ,TdAB A| A G ZA ,AB BD~ AAA F 0uAB EC ACA G $AB BAA  &AB A`A <4AB C AAA G c AAA B $tkAB BcAA ,AB BDAAA ,AB BD AAA D (.AA O Z AA<( AB C) AAA F  AAA B ,hAB AEAAA ,AB BD AAA C ,AB BD AAA C ,AB BDAAA ,(AB BDAAA 0XAB EC0 AAA B $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node6cryptoL14VerifyCallbackEiP17x509_store_ctx_st.text._ZN4node6cryptoL14VerifyCallbackEiP17x509_store_ctx_st.text.unlikely._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.rel.text._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely._ZN4node10ObjectWrap3RefEv.rel.text._ZN4node10ObjectWrap3RefEv.text.unlikely._ZN4node10ObjectWrapD2Ev.rel.text._ZN4node10ObjectWrapD2Ev.text.unlikely._ZN4node6crypto13SecureContext18GetSessionCallbackEP6ssl_stPhiPi.rel.text._ZN4node6crypto13SecureContext18GetSessionCallbackEP6ssl_stPhiPi.text.unlikely._ZN4node6crypto15SessionDataFreeEPcPv.rel.text._ZN4node6crypto15SessionDataFreeEPcPv.text.unlikely._ZN4node6crypto15RandomBytesFreeEPcPv.rel.text._ZN4node6crypto15RandomBytesFreeEPcPv.text.unlikely._ZN4node6crypto13SecureContext18NewSessionCallbackEP6ssl_stP14ssl_session_st.rel.text._ZN4node6crypto13SecureContext18NewSessionCallbackEP6ssl_stP14ssl_session_st.text.unlikely._ZN4node6crypto15RandomBytesWorkILb0EEEvP9uv_work_s.rel.text._ZN4node6crypto15RandomBytesWorkILb0EEEvP9uv_work_s.text.unlikely._ZN4node6cryptoL7LoadBIOEN2v86HandleINS1_5ValueEEE.rel.text._ZN4node6cryptoL7LoadBIOEN2v86HandleINS1_5ValueEEE.rodata.str1.1.text.unlikely._ZN4node6crypto10Connection27AdvertiseNextProtoCallback_EP6ssl_stPPKhPjPv.rel.text._ZN4node6crypto10Connection27AdvertiseNextProtoCallback_EP6ssl_stPPKhPjPv.text.unlikely._ZN4node6cryptoL17CryptoPemCallbackEPciiPv.rel.text._ZN4node6cryptoL17CryptoPemCallbackEPciiPv.text.unlikely._ZN4node6crypto13SecureContext18PskServerCallback_EP6ssl_stPKcPhj.rel.text._ZN4node6crypto13SecureContext18PskServerCallback_EP6ssl_stPKcPhj.text.unlikely._ZN4node6crypto10Connection24SelectNextProtoCallback_EP6ssl_stPPhS4_PKhjPv.rel.text._ZN4node6crypto10Connection24SelectNextProtoCallback_EP6ssl_stPPhS4_PKhjPv.text.unlikely._ZN4node6crypto10Connection18PskClientCallback_EP6ssl_stPKcPcjPhj.rel.text._ZN4node6crypto10Connection18PskClientCallback_EP6ssl_stPKcPcjPhj.text.unlikely._ZN4node6crypto13GetSSLCiphersERKN2v89ArgumentsE.rel.text._ZN4node6crypto13GetSSLCiphersERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10GetCiphersERKN2v89ArgumentsE.rel.text._ZN4node6crypto10GetCiphersERKN2v89ArgumentsE.text.unlikely._ZN4node6cryptoL15array_push_backI13evp_cipher_stEEvPKT_PKcS7_Pv.rel.text._ZN4node6cryptoL15array_push_backI13evp_cipher_stEEvPKT_PKcS7_Pv.text.unlikely._ZN4node6cryptoL15array_push_backI9env_md_stEEvPKT_PKcS7_Pv.rel.text._ZN4node6cryptoL15array_push_backI9env_md_stEEvPKT_PKcS7_Pv.text.unlikely._ZN4node6crypto9GetHashesERKN2v89ArgumentsE.rel.text._ZN4node6crypto9GetHashesERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto15RandomBytesWorkILb1EEEvP9uv_work_s.rel.text._ZN4node6crypto15RandomBytesWorkILb1EEEvP9uv_work_s.text.unlikely._ZN4node6cryptoL18crypto_threadid_cbEP18crypto_threadid_st.rel.text._ZN4node6cryptoL18crypto_threadid_cbEP18crypto_threadid_st.text.unlikely._ZN4node6cryptoL14crypto_lock_cbEiiPKci.rel.text._ZN4node6cryptoL14crypto_lock_cbEiiPKci.text.unlikely._ZN4node6crypto10Connection15SSLInfoCallbackEPK6ssl_stii.rel.text._ZN4node6crypto10Connection15SSLInfoCallbackEPK6ssl_stii.text.unlikely._ZN4node10ObjectWrap5UnrefEv.rel.text._ZN4node10ObjectWrap5UnrefEv.text.unlikely._ZN4node6crypto8DecipherD2Ev.rel.text._ZN4node6crypto8DecipherD2Ev.text.unlikely._ZN4node6crypto4SignD2Ev.rel.text._ZN4node6crypto4SignD2Ev.text.unlikely._ZN4node6crypto6VerifyD2Ev.rel.text._ZN4node6crypto6VerifyD2Ev.text.unlikely._ZN4node6crypto4HmacD2Ev.rel.text._ZN4node6crypto4HmacD2Ev.text.unlikely._ZN4node6crypto4HashD2Ev.rel.text._ZN4node6crypto4HashD2Ev.text.unlikely._ZN4node6crypto6CipherD2Ev.rel.text._ZN4node6crypto6CipherD2Ev.text.unlikely._ZN4node10ObjectWrapD0Ev.rel.text._ZN4node10ObjectWrapD0Ev.text.unlikely._ZN4node6crypto13DiffieHellmanD2Ev.rel.text._ZN4node6crypto13DiffieHellmanD2Ev.text.unlikely._ZN4node6crypto4ECDHD2Ev.rel.text._ZN4node6crypto4ECDHD2Ev.text.unlikely._ZN4node6crypto4HmacD0Ev.rel.text._ZN4node6crypto4HmacD0Ev.text.unlikely._ZN4node6crypto6VerifyD0Ev.rel.text._ZN4node6crypto6VerifyD0Ev.text.unlikely._ZN4node6crypto4HashD0Ev.rel.text._ZN4node6crypto4HashD0Ev.text.unlikely._ZN4node6crypto4SignD0Ev.rel.text._ZN4node6crypto4SignD0Ev.text.unlikely._ZN4node6crypto8DecipherD0Ev.rel.text._ZN4node6crypto8DecipherD0Ev.text.unlikely._ZN4node6crypto6CipherD0Ev.rel.text._ZN4node6crypto6CipherD0Ev.text.unlikely._ZN4node6crypto13DiffieHellmanD0Ev.rel.text._ZN4node6crypto13DiffieHellmanD0Ev.text.unlikely._ZN4node6crypto4ECDHD0Ev.rel.text._ZN4node6crypto4ECDHD0Ev.text.unlikely._ZN4node6crypto13SecureContextD2Ev.rel.text._ZN4node6crypto13SecureContextD2Ev.text.unlikely._ZN4node6crypto13SecureContextD0Ev.rel.text._ZN4node6crypto13SecureContextD0Ev.text.unlikely._ZN4node6crypto6Verify3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Verify3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Cipher3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Cipher3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Hmac3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Hmac3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto8Decipher3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto8Decipher3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Sign3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Sign3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10ConnectionD2Ev.rel.text._ZN4node6crypto10ConnectionD2Ev.text.unlikely._ZN4node6crypto10ConnectionD0Ev.rel.text._ZN4node6crypto10ConnectionD0Ev.rodata.str1.4.text.unlikely._ZN4node6crypto4ECDH3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto4ECDH3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto15PublicKeyCipher14PrivateDecryptERKN2v89ArgumentsE.rel.text._ZN4node6crypto15PublicKeyCipher14PrivateDecryptERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto15PublicKeyCipher13PublicEncryptERKN2v89ArgumentsE.rel.text._ZN4node6crypto15PublicKeyCipher13PublicEncryptERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman18DiffieHellmanGroupERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman18DiffieHellmanGroupERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext5CloseERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext5CloseERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Cipher14SetAutoPaddingERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Cipher14SetAutoPaddingERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto8Decipher14SetAutoPaddingERKN2v89ArgumentsE.rel.text._ZN4node6crypto8Decipher14SetAutoPaddingERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4ECDH12GenerateKeysERKN2v89ArgumentsE.rel.text._ZN4node6crypto4ECDH12GenerateKeysERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman12GetGeneratorERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman12GetGeneratorERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman8GetPrimeERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman8GetPrimeERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Hmac10HmacDigestERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Hmac10HmacDigestERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman12GenerateKeysERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman12GenerateKeysERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Hash10HashDigestERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Hash10HashDigestERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext6AddCRLERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext6AddCRLERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman13GetPrivateKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman13GetPrivateKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman12GetPublicKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman12GetPublicKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Cipher11CipherFinalERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Cipher11CipherFinalERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto8Decipher13DecipherFinalERKN2v89ArgumentsE.rel.text._ZN4node6crypto8Decipher13DecipherFinalERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman12SetPublicKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman12SetPublicKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman13SetPrivateKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman13SetPrivateKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext10SetOptionsERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext10SetOptionsERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4ECDH13GetPrivateKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto4ECDH13GetPrivateKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4ECDH12GetPublicKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto4ECDH12GetPublicKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13DiffieHellman13ComputeSecretERKN2v89ArgumentsE.rel.text._ZN4node6crypto13DiffieHellman13ComputeSecretERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext9AddCACertERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext9AddCACertERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4ECDH13SetPrivateKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto4ECDH13SetPrivateKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Sign9SignFinalERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Sign9SignFinalERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4ECDH12SetPublicKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto4ECDH12SetPublicKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext12AddRootCertsERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext12AddRootCertsERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext10LoadPKCS12ERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext10LoadPKCS12ERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Sign8SignInitERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Sign8SignInitERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Verify10VerifyInitERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Verify10VerifyInitERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Hmac8HmacInitERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Hmac8HmacInitERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext20SetPskServerCallbackERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext20SetPskServerCallbackERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4ECDH13ComputeSecretERKN2v89ArgumentsE.rel.text._ZN4node6crypto4ECDH13ComputeSecretERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext10SetPskHintERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext10SetPskHintERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext6SetKeyERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext6SetKeyERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext10SetCiphersERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext10SetCiphersERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Cipher12CipherInitIvERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Cipher12CipherInitIvERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto8Decipher12DecipherInitERKN2v89ArgumentsE.rel.text._ZN4node6crypto8Decipher12DecipherInitERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Cipher10CipherInitERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Cipher10CipherInitERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Cipher12CipherUpdateERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Cipher12CipherUpdateERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Hash3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Hash3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Sign10SignUpdateERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Sign10SignUpdateERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Hmac10HmacUpdateERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Hmac10HmacUpdateERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto4Hash10HashUpdateERKN2v89ArgumentsE.rel.text._ZN4node6crypto4Hash10HashUpdateERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Verify12VerifyUpdateERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Verify12VerifyUpdateERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto6Verify11VerifyFinalERKN2v89ArgumentsE.rel.text._ZN4node6crypto6Verify11VerifyFinalERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext4InitERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext4InitERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto8Decipher14DecipherUpdateERKN2v89ArgumentsE.rel.text._ZN4node6crypto8Decipher14DecipherUpdateERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto8Decipher14DecipherInitIvERKN2v89ArgumentsE.rel.text._ZN4node6crypto8Decipher14DecipherInitIvERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13SecureContext19SetSessionIdContextERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext19SetSessionIdContextERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto13EntropySourceEPhj.rel.text._ZN4node6crypto13EntropySourceEPhj.text.unlikely._ZN4node6crypto29SSL_CTX_use_certificate_chainEP10ssl_ctx_stP6bio_st.rel.text._ZN4node6crypto29SSL_CTX_use_certificate_chainEP10ssl_ctx_stP6bio_st.text.unlikely._ZN4node6crypto13SecureContext7SetCertERKN2v89ArgumentsE.rel.text._ZN4node6crypto13SecureContext7SetCertERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection14HandleBIOErrorEP6bio_stPKci.rel.text._ZN4node6crypto10Connection14HandleBIOErrorEP6bio_stPKci.text.unlikely._ZN4node6crypto10Connection14HandleSSLErrorEPKciNS1_10ZeroStatusENS1_13SyscallStatusE.rel.text._ZN4node6crypto10Connection14HandleSSLErrorEPKciNS1_10ZeroStatusENS1_13SyscallStatusE.text.unlikely._ZN4node6crypto10Connection10ClearErrorEv.text._ZN4node6crypto10Connection10ClearErrorEv.text.unlikely._ZN4node6crypto10Connection10GetSessionERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection10GetSessionERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection11VerifyErrorERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection11VerifyErrorERKN2v89ArgumentsE.rel.rodata._ZN4node6crypto10Connection11VerifyErrorERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection16GetCurrentCipherERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection16GetCurrentCipherERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection18GetPeerCertificateERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection18GetPeerCertificateERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection10SetSessionERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection10SetSessionERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection15IsSessionReusedERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection15IsSessionReusedERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection14IsInitFinishedERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection14IsInitFinishedERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection5CloseERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection5CloseERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection18GetNegotiatedProtoERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection18GetNegotiatedProtoERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection15SetNPNProtocolsERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection15SetNPNProtocolsERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection13GetServernameERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection13GetServernameERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection14SetSNICallbackERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection14SetSNICallbackERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection20SetPskClientCallbackERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection20SetPskClientCallbackERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection12ClearPendingERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection12ClearPendingERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection10EncPendingERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection10EncPendingERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection5StartERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection5StartERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection16SetShutdownFlagsEv.rel.text._ZN4node6crypto10Connection16SetShutdownFlagsEv.text.unlikely._ZN4node6crypto17ClientHelloParser6FinishEv.rel.text._ZN4node6crypto17ClientHelloParser6FinishEv.text.unlikely._ZN4node6crypto17ClientHelloParser5WriteEPKhj.rel.text._ZN4node6crypto17ClientHelloParser5WriteEPKhj.text.unlikely._ZN4node6crypto10Connection11LoadSessionERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection11LoadSessionERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection5EncInERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection5EncInERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection8ClearOutERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection8ClearOutERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection6EncOutERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection6EncOutERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection7ClearInERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection7ClearInERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection8ShutdownERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection8ShutdownERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection7InitNPNEPNS0_13SecureContextEb.rel.text._ZN4node6crypto10Connection7InitNPNEPNS0_13SecureContextEb.text.unlikely._ZN4node6crypto10Connection3NewERKN2v89ArgumentsE.rel.text._ZN4node6crypto10Connection3NewERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto10Connection25SelectSNIContextCallback_EP6ssl_stPiPv.rel.text._ZN4node6crypto10Connection25SelectSNIContextCallback_EP6ssl_stPiPv.text.unlikely._ZN4node6crypto10EIO_PBKDF2EPNS0_10pbkdf2_reqE.rel.text._ZN4node6crypto10EIO_PBKDF2EPNS0_10pbkdf2_reqE.text.unlikely._ZN4node6crypto10EIO_PBKDF2EP9uv_work_s.rel.text._ZN4node6crypto10EIO_PBKDF2EP9uv_work_s.text.unlikely._ZN4node6crypto15EIO_PBKDF2AfterEPNS_7commonsEPNS0_10pbkdf2_reqEPN2v85LocalINS5_5ValueEEE.rel.text._ZN4node6crypto15EIO_PBKDF2AfterEPNS_7commonsEPNS0_10pbkdf2_reqEPN2v85LocalINS5_5ValueEEE.text.unlikely._ZN4node6crypto17EIO_PBKDF2CleanupEPNS0_10pbkdf2_reqE.rel.text._ZN4node6crypto17EIO_PBKDF2CleanupEPNS0_10pbkdf2_reqE.text.unlikely._ZN4node6crypto15EIO_PBKDF2AfterEP9uv_work_si.rel.text._ZN4node6crypto15EIO_PBKDF2AfterEP9uv_work_si.text.unlikely._ZN4node6crypto6PBKDF2ERKN2v89ArgumentsE.rel.text._ZN4node6crypto6PBKDF2ERKN2v89ArgumentsE.text.unlikely._ZN4node6crypto18RandomBytesRequestD2Ev.rel.text._ZN4node6crypto18RandomBytesRequestD2Ev.text.unlikely._ZN4node6crypto16RandomBytesCheckEPNS_7commonsEPNS0_18RandomBytesRequestEPN2v85LocalINS5_5ValueEEE.rel.text._ZN4node6crypto16RandomBytesCheckEPNS_7commonsEPNS0_18RandomBytesRequestEPN2v85LocalINS5_5ValueEEE.text.unlikely._ZN4node6crypto16RandomBytesAfterEP9uv_work_si.rel.text._ZN4node6crypto16RandomBytesAfterEP9uv_work_si.text.unlikely._ZN4node6crypto11RandomBytesILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.rel.text._ZN4node6crypto11RandomBytesILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.text.unlikely._ZN4node6crypto11RandomBytesILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.rel.text._ZN4node6crypto11RandomBytesILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE.text.unlikely._ZN4node18SetPrototypeMethodIN2v85LocalINS1_16FunctionTemplateEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE.rel.text._ZN4node18SetPrototypeMethodIN2v85LocalINS1_16FunctionTemplateEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE.text.unlikely._ZN4node9SetMethodIN2v86HandleINS1_6ObjectEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE.rel.text._ZN4node9SetMethodIN2v86HandleINS1_6ObjectEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE.text.unlikely._ZN4node6crypto10InitCryptoEN2v86HandleINS1_6ObjectEEE.rel.text._ZN4node6crypto10InitCryptoEN2v86HandleINS1_6ObjectEEE.text.unlikely._GLOBAL__sub_I_node_crypto.cc.rel.text.startup._GLOBAL__sub_I_node_crypto.cc.rel.init_array.bss._ZZN4node6crypto10Connection14HandleBIOErrorEP6bio_stPKciE13ssl_error_buf.rodata._ZL15CERTIFICATE_PFX.rodata._ZL14PUBRSA_KEY_PFX.rodata._ZL14PUBLIC_KEY_PFX.rel.data.rel.ro._ZTVN4node10ObjectWrapE.rel.data.rel.ro._ZTVN4node6crypto13SecureContextE.rel.data.rel.ro._ZTVN4node6crypto10ConnectionE.rel.data.rel.ro._ZTVN4node6crypto6CipherE.rel.data.rel.ro._ZTVN4node6crypto8DecipherE.rel.data.rel.ro._ZTVN4node6crypto4HmacE.rel.data.rel.ro._ZTVN4node6crypto4HashE.rel.data.rel.ro._ZTVN4node6crypto4SignE.rel.data.rel.ro._ZTVN4node6crypto6VerifyE.rel.data.rel.ro._ZTVN4node6crypto13DiffieHellmanE.rel.data.rel.ro._ZTVN4node6crypto4ECDHE.rel.data.rel.node_crypto_module.bss._ZN4node6cryptoL5locksE.rel.data.rel.local._ZN4node10root_certsE.rel.data.rel.modp_groups.data.group_modp18.data.group_modp17.data.group_modp16.data.group_modp15.data.group_modp14.data.group_modp5.data.group_modp2.data.group_modp1.data.two_generator.bss._ZN4node6cryptoL15root_cert_storeE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.groupOPQRSSTUWXZ[]^`acdfgijlmG_mopqstztvwyz|}"/]|@N'&%    "#%&()+,./124578:;=>@ACDFGIJLMOPRSUVXY[\^_abdeghjkmnpqstvwyz|}$    GF eO"$%&'(*,.02468:<>@ACEFGHIJKLMNOPRtS{oo ooo-o,?oZoLonoooooXH(o xo/o& o-o4;BIoI@PWlo^Yoellyosozooooo8hoo-o8DoUo qooo"o)o0o7o>oEoL oS#oZ7oaKohoooovXo}oooooo oo0oEoTodioooooo oo%o,o3o:(oAH8oO4VT]Vodaok}ortyoooooo0H`x 8P h!(/6=D(K@RXYp`gnou o|oo!o^ofo0o;oPoDoooooooooooo&o;oo$Mo+po2o9]o@oGNoUo\ocojoqoxo8o3oAoFoMoUo_ofoso~oooooooooo oo o  o'" o.- o58 o<D oCT oJc oQo oX o_ of om ot o{ o o o o o o o o o# o1 oD oQ o_ oh ou o o o o o o o o o# o* o1 o8 o? oF oM oT o[  ob ! oi / op Xw (o~      5 X q  Q      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN B"U P $ < T -"Xo  f"[ !(  ( f"[A \^  ,a  ,d g2 U        %x"jFO/qyw*G_z?Ud}!5RrZ%EU^r%TX"'9HduqL"Q"!0"" !6!4"M"h!8""!2""!4)"B"]!.w"l"~"!:~""";!<S_"x"""""""9"R"u!*""4" 4"=4"h7"4"EH"!,6GH"gP"[",>" D R _ q  "    !#!=!J!\!e!"!C!!!!""";"U"^"e"q""""#0#K#"#G"##" $$$$F$"$"$$!%,%"k%{%e"%%H%&"&7&E&S&"&" &"#'"'5'"&o'")'",'1/+(I(V(o(d"2(((("5()()"8h)x))))));))**6*E*">{**E"A*+++,+"Da+n++++G+|A+J7,F,S,_,w,,,,,"M,, --#-"PX-`-"S---V- .+. "Ya.u..4\.._/4bV/n/"e/////0$0}"h]0e0t0 "k0"n00>111"q1"t2%2"wX2d2"z2"}2"33J3X3p3333333344.4C4"~4"445@5Q5Z5n5555K56/6>6J6^6l6666[C7Q7{77788/8M8_8888{ 9'9:9O9c9p9999999999 ):9:I:S:::::3";pd;;/;-;<<Qz<<<3=3P======>l6><>w>>+>>n ?)?K_?i???d? @/@a@q@}@@@@u@A'A:AxAAAA&APBkBBBBC.,C.TC  CC"4D"D"DYEvEEE"TF|FFFFF&GVGGGGGGH!H0HLHiHHHHHHHH>I`LIMIK)IJ5IIBIHOIG\IFiIEvI node_crypto.cc_ZN4node6cryptoL14VerifyCallbackEiP17x509_store_ctx_st_ZN4node6cryptoL7LoadBIOEN2v86HandleINS1_5ValueEEE_ZN4node6cryptoL17CryptoPemCallbackEPciiPv_ZN4node6cryptoL15array_push_backI13evp_cipher_stEEvPKT_PKcS7_Pv_ZN4node6cryptoL15array_push_backI9env_md_stEEvPKT_PKcS7_Pv_ZN4node6cryptoL18crypto_threadid_cbEP18crypto_threadid_st_ZN4node6cryptoL14crypto_lock_cbEiiPKci_ZN4node6cryptoL5locksE_ZN4node6cryptoL15root_cert_storeE_ZL14PUBLIC_KEY_PFX_ZL14PUBRSA_KEY_PFX_ZL15CERTIFICATE_PFX_ZZN4node6crypto10Connection14HandleBIOErrorEP6bio_stPKciE13ssl_error_buf_GLOBAL__sub_I_node_crypto.cc_ZStL8__ioinit.L3099.LC10.LC14.LC16.LC17.LC19.LC20.LC58.LC59.LC61.LC65.LC64.LC67.LC72.LC74.LC78.LC81.LC83.LC85.LC89.LC91.LC96.LC94.LC95.LC100.LC99.LC98.LC102.LC105.LC103.LC104.LC109.LC108.LC111.LC114.LC113.LC118.LC117.LC120.LC121.LC122.LC124.LC125.LC126.LC128.LC130.LC129.LC132.LC134.LC137.LC140.LC143.LC142.LC141.LC145.LC146.LC148.LC149.LC152.LC151.LC153.LC155.LC157.LC159.LC161.LC163.LC166.LC167.LC168.LC169.LC170.LC171.LC172.LC173.LC174.LC176.LC177.LC175.LC178.LC179.LC180.LC181.LC182.LC183.LC184.LC185.LC186.LC187.LC190.LC192.LC195.LC197.LC199.LC201.LC205.LC231.LC206.LC207.LC208.LC209.LC210.LC211.LC212.LC213.LC214.LC215.LC216.LC217.LC218.LC219.LC220.LC221.LC222.LC223.LC224.LC225.LC226.LC227.LC228.LC229.LC230.L3100.L3102.L3103.L3104.L3105.L3106.L3107.L3108.L3109.L3110.L3111.L3112.L3113.L3114.L3115.L3116.L3117.L3118.L3119.L3120.L3121.L3122.L3123.L3124.L3125.L3126.L3127.L3128.LC233.LC234.LC236.LC237.LC238.LC243.LC244.LC239.LC240.LC242.LC241.LC246.LC249.LC253.LC256.LC261.LC262.LC265.LC264.LC267.LC272.LC273.LC271.LC276.LC277.LC275.LC279.LC282.LC283.LC281.LC285.LC288.LC293.LC297.LC300.LC298.LC302.LC299.LC301.LC307.LC308.LC315.LC316.LC317.LC318.LC319.LC320.LC321.LC322.LC323.LC324.LC325.LC326.LC327.LC328.LC329.LC330.LC331.LC332.LC333.LC334.LC335.LC336.LC337.LC338.LC339.LC340.LC341.LC342.LC343.LC344.LC345.LC346.LC347.LC348.LC349.LC350.LC351.LC352.LC353.LC354.LC355.LC356.LC357.LC358.LC359.LC360.LC361.LC362.LC363.LC364.LC365.LC366.LC367.LC368.LC369.LC370.LC371.LC372.LC373.LC374.LC375.LC376.LC377.LC378.LC379.LC380.LC381.LC382.LC383.LC313.LC314_ZN4node10ObjectWrapD5Ev_ZN4node6crypto8DecipherD5Ev_ZN4node6crypto4SignD5Ev_ZN4node6crypto6VerifyD5Ev_ZN4node6crypto4HmacD5Ev_ZN4node6crypto4HashD5Ev_ZN4node6crypto6CipherD5Ev_ZN4node6crypto13DiffieHellmanD5Ev_ZN4node6crypto4ECDHD5Ev_ZN4node6crypto13SecureContextD5Ev_ZN4node6crypto10ConnectionD5Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN4node6crypto13SecureContext18GetSessionCallbackEP6ssl_stPhiPiSSL_get_ex_data_ZN4node6crypto15SessionDataFreeEPcPv_ZdaPv_ZN4node6crypto15RandomBytesFreeEPcPv_ZN4node6crypto13SecureContext18NewSessionCallbackEP6ssl_stP14ssl_session_st_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEii2d_SSL_SESSION_Znajmemset_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZNK2v85Value8ToObjectEv_ZN4node6Buffer3NewEPcjPFvS1_PvES2_PNS_7commonsE_ZNK2v85Value8ToStringEv_ZN4node12MakeCallbackEPNS_7commonsEN2v86HandleINS2_6ObjectEEENS3_INS2_6StringEEEiPNS3_INS2_5ValueEEE_ZN4node6crypto15RandomBytesWorkILb0EEEvP9uv_work_sRAND_pollRAND_statusRAND_bytesERR_get_errorBIO_s_memBIO_new_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsEBIO_free_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEvBIO_write_ZN6jxcore8JXStringD1Ev_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN4node6crypto10Connection27AdvertiseNextProtoCallback_EP6ssl_stPPKhPjPvstrlen_ZN4node6crypto13SecureContext18PskServerCallback_EP6ssl_stPKcPhj_ZN4node7commons11getInstanceEvSSL_get_SSL_CTXSSL_CTX_get_ex_data_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v87Context10GetCurrentEv_ZN2v87Context6GlobalEv_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZN4node6Buffer11HasInstanceEN2v86HandleINS1_5ValueEEE_ZN2v87Isolate10GetCurrentEv_ZN4node6crypto10Connection24SelectNextProtoCallback_EP6ssl_stPPhS4_PKhjPvSSL_select_next_proto_ZN2v85FalseEv_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v84NullEv_ZN4node6crypto10Connection18PskClientCallback_EP6ssl_stPKcPcjPhj_ZN2v88TryCatchC1Ev_ZNK2v88TryCatch9HasCaughtEv_ZNK2v88TryCatch11CanContinueEv_ZN2v88TryCatchD1Ev_ZNK2v85Value8IsObjectEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN4node11StringBytes6JXSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZN4node11StringBytes7JXWriteEPcjN2v86HandleINS2_5ValueEEENS_8encodingEbPi_ZN4node15ReportExceptionERN2v88TryCatchEb_ZN2v89UndefinedEv_ZN4node6crypto13GetSSLCiphersERKN2v89ArgumentsE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectETLSv1_server_methodSSL_CTX_newSSL_new_ZN2v85Array3NewEPNS_7IsolateEiSSL_get_cipherssk_valueSSL_CIPHER_get_name_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeEsk_numSSL_freeSSL_CTX_free_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN4node6crypto10GetCiphersERKN2v89ArgumentsEEVP_CIPHER_do_all_sorted_ZNK2v85Array6LengthEv_ZN4node6crypto9GetHashesERKN2v89ArgumentsEEVP_MD_do_all_sorted_ZN4node6crypto15RandomBytesWorkILb1EEEvP9uv_work_sRAND_pseudo_bytesuv_thread_selfCRYPTO_THREADID_set_numericuv_rwlock_rdlockuv_rwlock_wrunlockuv_rwlock_wrlockuv_rwlock_rdunlock_ZN4node6crypto10Connection15SSLInfoCallbackEPK6ssl_stii_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN4node6crypto8DecipherD2Ev_ZTVN4node6crypto8DecipherEEVP_CIPHER_CTX_cleanup_ZN4node6crypto8DecipherD1Ev_ZN4node6crypto4SignD2Ev_ZTVN4node6crypto4SignEEVP_MD_CTX_cleanup_ZN4node6crypto4SignD1Ev_ZN4node6crypto6VerifyD2Ev_ZTVN4node6crypto6VerifyE_ZN4node6crypto6VerifyD1Ev_ZN4node6crypto4HmacD2Ev_ZTVN4node6crypto4HmacEHMAC_CTX_cleanup_ZN4node6crypto4HmacD1Ev_ZN4node6crypto4HashD2Ev_ZTVN4node6crypto4HashE_ZN4node6crypto4HashD1Ev_ZN4node6crypto6CipherD2Ev_ZTVN4node6crypto6CipherE_ZN4node6crypto6CipherD1Ev_ZN4node10ObjectWrapD0Ev_ZdlPv_ZN4node6crypto13DiffieHellmanD2Ev_ZTVN4node6crypto13DiffieHellmanEDH_free_ZN4node6crypto13DiffieHellmanD1Ev_ZN4node6crypto4ECDHD2Ev_ZTVN4node6crypto4ECDHEEC_KEY_free_ZN4node6crypto4ECDHD1Ev_ZN4node6crypto4HmacD0Ev_ZN4node6crypto6VerifyD0Ev_ZN4node6crypto4HashD0Ev_ZN4node6crypto4SignD0Ev_ZN4node6crypto8DecipherD0Ev_ZN4node6crypto6CipherD0Ev_ZN4node6crypto13DiffieHellmanD0Ev_ZN4node6crypto4ECDHD0Ev_ZN4node6crypto13SecureContextD2Ev_ZTVN4node6crypto13SecureContextE_ZN4node6crypto13SecureContextD1Ev_ZN4node6crypto13SecureContextD0Ev_ZN4node6crypto6Verify3NewERKN2v89ArgumentsE_Znwj_ZN4node6crypto6Cipher3NewERKN2v89ArgumentsE_ZN4node6crypto4Hmac3NewERKN2v89ArgumentsE_ZN4node6crypto8Decipher3NewERKN2v89ArgumentsE_ZN4node6crypto4Sign3NewERKN2v89ArgumentsE_ZN4node6crypto13SecureContext3NewERKN2v89ArgumentsE_ZN4node6crypto10ConnectionD2Ev_ZTVN4node6crypto10ConnectionESSL_SESSION_free_ZN4node6crypto10ConnectionD1Ev_ZN4node6crypto10ConnectionD0Ev_ZN4node6crypto4ECDH3NewERKN2v89ArgumentsE_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEbOBJ_sn2nidEC_KEY_new_by_curve_nameEC_KEY_get0_group_ZN4node6crypto15PublicKeyCipher14PrivateDecryptERKN2v89ArgumentsE_ZNK2v85Value11Uint32ValueEvBIO_new_mem_bufPEM_read_bio_PrivateKeyEVP_PKEY_CTX_newEVP_PKEY_decrypt_initEVP_PKEY_CTX_ctrlEVP_PKEY_decrypt_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEEEVP_PKEY_freeBIO_free_allEVP_PKEY_CTX_freeERR_error_string_n_ZN4node6crypto15PublicKeyCipher13PublicEncryptERKN2v89ArgumentsEEVP_PKEY_encrypt_initEVP_PKEY_encryptPEM_read_bio_X509X509_get_pubkeyPEM_read_bio_PUBKEYPEM_read_bio_RSAPublicKeyEVP_PKEY_newEVP_PKEY_set1_RSARSA_free_ZN4node6crypto13DiffieHellman18DiffieHellmanGroupERKN2v89ArgumentsEmodp_groupsstrcasecmpDH_newBN_bin2bn_ZN4node6crypto13DiffieHellman3NewERKN2v89ArgumentsE_ZNK2v85Value7IsInt32Ev_ZNK2v85Value10Int32ValueEvDH_generate_parameters_exDH_checkBN_newBN_set_word_ZN4node6crypto13SecureContext5CloseERKN2v89ArgumentsE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN4node6crypto6Cipher14SetAutoPaddingERKN2v89ArgumentsE_ZNK2v85Value12BooleanValueEvEVP_CIPHER_CTX_set_padding_ZN4node6crypto8Decipher14SetAutoPaddingERKN2v89ArgumentsE_ZN4node6crypto4ECDH12GenerateKeysERKN2v89ArgumentsEEC_KEY_generate_key_ZN4node6crypto13DiffieHellman12GetGeneratorERKN2v89ArgumentsEBN_num_bitsBN_bn2bin_ZN4node6EncodeEPKvjNS_8encodingE_ZN4node6crypto13DiffieHellman8GetPrimeERKN2v89ArgumentsE_ZN4node6crypto4Hmac10HmacDigestERKN2v89ArgumentsE_ZN4node13ParseEncodingEN2v86HandleINS0_5ValueEEENS_8encodingE_ZN4node11StringBytes6EncodeEPKcjNS_8encodingEHMAC_Final_ZN4node6crypto13DiffieHellman12GenerateKeysERKN2v89ArgumentsEDH_generate_key_ZN4node6crypto4Hash10HashDigestERKN2v89ArgumentsEEVP_DigestFinal_ex_ZN4node6crypto13SecureContext6AddCRLERKN2v89ArgumentsEPEM_read_bio_X509_CRLX509_STORE_add_crlX509_STORE_set_flagsX509_CRL_free_ZN2v84TrueEv_ZN4node6crypto13DiffieHellman13GetPrivateKeyERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman12GetPublicKeyERKN2v89ArgumentsE_ZN4node6crypto6Cipher11CipherFinalERKN2v89ArgumentsEEVP_CIPHER_CTX_block_sizeEVP_CipherFinal_ex_ZN4node6crypto8Decipher13DecipherFinalERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman12SetPublicKeyERKN2v89ArgumentsE_ZN4node6crypto13DiffieHellman13SetPrivateKeyERKN2v89ArgumentsE_ZN4node6crypto13SecureContext10SetOptionsERKN2v89ArgumentsE_ZNK2v85Value12IntegerValueEvSSL_CTX_ctrl_ZNK2v85Value8IsUint32Ev_ZN4node6crypto4ECDH13GetPrivateKeyERKN2v89ArgumentsEEC_KEY_get0_private_keymallocfree_ZN4node6crypto4ECDH12GetPublicKeyERKN2v89ArgumentsEEC_KEY_get0_public_keyEC_POINT_point2oct_ZN4node6crypto13DiffieHellman13ComputeSecretERKN2v89ArgumentsEERR_clear_errorDH_sizeDH_compute_keyBN_freememmoveDH_check_pub_key_ZN4node6crypto13SecureContext9AddCACertERKN2v89ArgumentsEX509_STORE_add_certSSL_CTX_add_client_CAX509_freeSSL_CTX_set_cert_storeX509_STORE_new_ZN4node6crypto4ECDH13SetPrivateKeyERKN2v89ArgumentsEEC_KEY_set_private_key_ZN4node6crypto4Sign9SignFinalERKN2v89ArgumentsE_ZN4node11DecodeWriteEPcjN2v86HandleINS1_5ValueEEENS_8encodingEEVP_SignFinalstderrERR_print_errors_fp_ZN4node6crypto4ECDH12SetPublicKeyERKN2v89ArgumentsEEC_POINT_newEC_POINT_oct2pointEC_KEY_set_public_keyEC_POINT_free_ZN4node6crypto13SecureContext12AddRootCertsERKN2v89ArgumentsE_ZN4node10root_certsE_ZN4node6crypto13SecureContext10LoadPKCS12ERKN2v89ArgumentsEd2i_PKCS12_bioPKCS12_parsePKCS12_freeERR_reason_error_stringSSL_CTX_use_certificateSSL_CTX_use_PrivateKeysk_popsk_free_ZN4node6crypto4Sign8SignInitERKN2v89ArgumentsEEVP_get_digestbynameEVP_MD_CTX_initEVP_DigestInit_exprintf_ZN4node6crypto6Verify10VerifyInitERKN2v89ArgumentsEfprintf_ZN4node6crypto4Hmac8HmacInitERKN2v89ArgumentsEHMAC_CTX_initHMAC_Init_ZN4node6crypto13SecureContext20SetPskServerCallbackERKN2v89ArgumentsE_ZNK2v85Value10IsFunctionEvSSL_CTX_set_psk_server_callback_ZN4node6crypto4ECDH13ComputeSecretERKN2v89ArgumentsEEC_GROUP_get_degreeECDH_compute_key_ZN4node6crypto13SecureContext10SetPskHintERKN2v89ArgumentsESSL_CTX_use_psk_identity_hint_ZN4node6crypto13SecureContext6SetKeyERKN2v89ArgumentsE_ZN4node6crypto13SecureContext10SetCiphersERKN2v89ArgumentsESSL_CTX_set_cipher_list_ZN4node6crypto6Cipher12CipherInitIvERKN2v89ArgumentsEEVP_get_cipherbynameEVP_CIPHER_iv_lengthEVP_CIPHER_flagsEVP_CIPHER_CTX_initEVP_CipherInit_exEVP_CIPHER_CTX_set_key_length_ZN4node6crypto8Decipher12DecipherInitERKN2v89ArgumentsEEVP_md5EVP_BytesToKey_ZN4node6crypto6Cipher10CipherInitERKN2v89ArgumentsE_ZN4node6crypto6Cipher12CipherUpdateERKN2v89ArgumentsEEVP_CipherUpdate_ZN4node11StringBytes13IsValidStringEN2v86HandleINS1_6StringEEENS_8encodingE_ZN4node11StringBytes13JXStorageSizeEN2v86HandleINS1_5ValueEEENS_8encodingEbj_ZN4node13ParseEncodingEPKciNS_8encodingE_ZN4node6crypto4Hash3NewERKN2v89ArgumentsE_ZN4node6crypto4Sign10SignUpdateERKN2v89ArgumentsEEVP_DigestUpdate_ZN4node6crypto4Hmac10HmacUpdateERKN2v89ArgumentsEHMAC_Update_ZN4node6crypto4Hash10HashUpdateERKN2v89ArgumentsE_ZN4node6crypto6Verify12VerifyUpdateERKN2v89ArgumentsE_ZN4node6crypto6Verify11VerifyFinalERKN2v89ArgumentsEEVP_VerifyFinal_ZN4node6crypto13SecureContext4InitERKN2v89ArgumentsESSLv23_methodSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_new_cbSSL_CTX_set_ex_datastrcmpTLSv1_1_methodTLSv1_1_server_methodTLSv1_1_client_methodTLSv1_2_methodTLSv1_2_server_methodTLSv1_2_client_methodSSLv23_server_methodSSLv23_client_method_ZN4node6crypto8Decipher14DecipherUpdateERKN2v89ArgumentsE_ZN4node6crypto8Decipher14DecipherInitIvERKN2v89ArgumentsE_ZN4node6crypto13SecureContext19SetSessionIdContextERKN2v89ArgumentsESSL_CTX_set_session_id_context_ZNSs4_Rep20_S_empty_rep_storageEERR_print_errorsBIO_ctrl_ZNSsC1EPKcjRKSaIcE_ZNSs6assignERKSs_ZNSs6assignEPKcj_ZNSs4_Rep10_M_destroyERKSaIcE_ZN4node6crypto13EntropySourceEPhj_ZN4node6crypto29SSL_CTX_use_certificate_chainEP10ssl_ctx_stP6bio_stPEM_read_bio_X509_AUXERR_peek_errorsk_pop_freeERR_peek_last_errorERR_put_error_ZN4node6crypto13SecureContext7SetCertERKN2v89ArgumentsE_ZN4node6crypto10Connection14HandleBIOErrorEP6bio_stPKciBIO_test_flags_ZN4node6crypto10Connection14HandleSSLErrorEPKciNS1_10ZeroStatusENS1_13SyscallStatusESSL_get_error_ZN4node6crypto10Connection10ClearErrorEv_ZN4node6crypto10Connection10GetSessionERKN2v89ArgumentsESSL_get_session_ZN4node6crypto10Connection11VerifyErrorERKN2v89ArgumentsESSL_get_peer_certificateSSL_get_verify_resultX509_verify_cert_error_string_ZN4node6crypto10Connection16GetCurrentCipherERKN2v89ArgumentsESSL_get_current_cipher_ZN2v86Object3NewEvSSL_CIPHER_get_version_ZN4node6crypto10Connection18GetPeerCertificateERKN2v89ArgumentsEX509_get_subject_nameX509_NAME_print_exX509_get_issuer_nameX509_get_ext_by_NIDX509_get_extX509V3_EXT_printEVP_PKEY_get1_RSABN_printASN1_TIME_printEVP_sha1X509_digestX509_get_ext_d2iOBJ_obj2txtASN1_OBJECT_free_ZN4node6crypto10Connection10SetSessionERKN2v89ArgumentsEd2i_SSL_SESSIONSSL_set_session_ZN4node6crypto10Connection15IsSessionReusedERKN2v89ArgumentsESSL_ctrl_ZN4node6crypto10Connection14IsInitFinishedERKN2v89ArgumentsESSL_get_psk_identitySSL_state_ZN4node6crypto10Connection5CloseERKN2v89ArgumentsE_ZN4node6crypto10Connection18GetNegotiatedProtoERKN2v89ArgumentsESSL_get0_next_proto_negotiated_ZN4node6crypto10Connection15SetNPNProtocolsERKN2v89ArgumentsE_ZN4node6crypto10Connection13GetServernameERKN2v89ArgumentsE_ZN2v811HandleScope12CreateHandleEPNS_8internal10HeapObjectE_ZN4node6crypto10Connection14SetSNICallbackERKN2v89ArgumentsE_ZN4node6crypto10Connection20SetPskClientCallbackERKN2v89ArgumentsESSL_set_psk_client_callback_ZN4node6crypto10Connection12ClearPendingERKN2v89ArgumentsE_ZN4node6crypto10Connection10EncPendingERKN2v89ArgumentsE_ZN4node6crypto10Connection5StartERKN2v89ArgumentsESSL_acceptSSL_connect_ZN4node6crypto10Connection16SetShutdownFlagsEvSSL_get_shutdown_ZN4node6crypto17ClientHelloParser6FinishEv_ZN4node6crypto17ClientHelloParser5WriteEPKhjabort_ZN4node6crypto10Connection11LoadSessionERKN2v89ArgumentsE_ZN4node6crypto10Connection5EncInERKN2v89ArgumentsE_ZN4node6crypto10Connection8ClearOutERKN2v89ArgumentsESSL_read_ZN4node6crypto10Connection6EncOutERKN2v89ArgumentsEBIO_read_ZN4node6crypto10Connection7ClearInERKN2v89ArgumentsESSL_write_ZN4node6crypto10Connection8ShutdownERKN2v89ArgumentsESSL_shutdown_ZN4node6crypto10Connection7InitNPNEPNS0_13SecureContextEbSSL_CTX_set_next_proto_select_cbSSL_CTX_set_next_protos_advertised_cb_ZN4node6crypto10Connection3NewERKN2v89ArgumentsESSL_set_ex_dataSSL_set_bioSSL_set_verifySSL_set_connect_stateSSL_set_info_callback_ZN4node6crypto10Connection25SelectSNIContextCallback_EP6ssl_stPiPvSSL_CTX_callback_ctrlSSL_set_accept_stateSSL_get_servername_ZN2v816FunctionTemplate11HasInstanceENS_6HandleINS_5ValueEEESSL_set_SSL_CTX_ZN4node6crypto10EIO_PBKDF2EPNS0_10pbkdf2_reqEPKCS5_PBKDF2_HMAC_SHA1_ZN4node6crypto10EIO_PBKDF2EP9uv_work_s_ZN4node6crypto15EIO_PBKDF2AfterEPNS_7commonsEPNS0_10pbkdf2_reqEPN2v85LocalINS5_5ValueEEE_ZN4node6crypto17EIO_PBKDF2CleanupEPNS0_10pbkdf2_reqE_ZN4node6crypto15EIO_PBKDF2AfterEP9uv_work_si_ZN4node6crypto6PBKDF2ERKN2v89ArgumentsE_ZNK2v85Value8IsNumberEvuv_queue_work_ZN4node6crypto18RandomBytesRequestD2Ev_ZN4node6crypto18RandomBytesRequestD1Ev_ZN4node6crypto16RandomBytesCheckEPNS_7commonsEPNS0_18RandomBytesRequestEPN2v85LocalINS5_5ValueEEE_ZN4node6crypto16RandomBytesAfterEP9uv_work_si_ZN4node6crypto11RandomBytesILb1EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN4node6crypto11RandomBytesILb0EEEN2v86HandleINS2_5ValueEEERKNS2_9ArgumentsE_ZN4node18SetPrototypeMethodIN2v85LocalINS1_16FunctionTemplateEEEEEvT_PKcPFNS1_6HandleINS1_5ValueEEERKNS1_9ArgumentsEE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN4node9SetMethodIN2v86HandleINS1_6ObjectEEEEEvT_PKcPFNS2_INS1_5ValueEEERKNS1_9ArgumentsEE_ZN2v816FunctionTemplate11GetFunctionEv_ZN4node6crypto10InitCryptoEN2v86HandleINS1_6ObjectEEE_Z10customLocki_ZN4node7commons16ssl_initialized_E_Z12customUnlocki_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEESSL_library_initOPENSSL_add_all_algorithms_noconfOpenSSL_add_all_digestsSSL_load_error_stringsERR_load_crypto_stringsCRYPTO_num_locksuv_rwlock_initCRYPTO_set_locking_callbackCRYPTO_THREADID_set_callbackSSL_COMP_get_compression_methodssk_zero__android_log_print_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexitnode_crypto_modulegroup_modp1two_generatorgroup_modp2group_modp5group_modp14group_modp15group_modp16group_modp17group_modp18pthread_create !5 " 0KZ 1M ! !  '/EXn )Ds~ !*@i !6>Fdv~ ,:M $:LZky n ' 2Bgx#1a  '19Aa/GW o =o    LUr{ p q Ky,BQa  !)1I_n~ &Eit ! r"#! s  $,DZfs -% DW&j DW&j  $,DZfs /( !*@* +$, ( \5-H \U.a/q0 3;CYh-]h 53@4 6379Mhw :0;6Jet >0;6Jet A3B9Mhw E0;6Jet H379Mhw .IX`K M.N4Hcr Q.R4Vq A3B9MhwK >0;6Jet|K E0;6Jet|K :0;6Jet|K 6379MhwK H379MhwK M.N4HcrzK Q.R4VqK ], h9!Vcw ], h=!Zg{K  $,=S_la> 34&  $,=S_laH 34&  $,=S_laA 34&  $,=S_la634)  $,=S_la: 34&  $,=S_la] 3(47 h. Di^t& h. Di^t&.K  '/G]ivmno t" #2BZtpaQq3%44R u  %-5Rkw,=ct.sHmrnt uvwGxyy v&;zP#k~{| }._r-~Qf"{#*S{a|| -5=Tm<Ms >sXmnt O N M" 4uNv`xJ{X|`} v3zH#cv2Rr~"#Rr |"K{Y|  !)1RhwaM w "#jmnAcz34  x(:"L#av  $,Mco|aM<N|34 y0"B#T~/G_z  '/@Vbl h!  $,CYer#9Eb  $,CYer#9Eb  '/^k~ z"*#  '/DZfs(4r {"#  '/DZfs(4r {"#  $,CYer7IcB  '/DZfs2CO { |"#  "*2Mco|N\; {"#P  $,Mco| }z#R| '4?  '/DZfs0<z {"# ~  '/DZfs0<z {"#   %-5Slx~"7zL#a7H_k  %-5Slx~,AzV#k7.Xo{  '/Oeq~,:Zh {"2 Pbzt# vz#  '/Oeq~,:Zh {"2 Pbzt# vz#  $,Mco| }z#n"  '/I_kx*8 K]"o#   2"D#V  '/Lbn{s'?n "# 2] x"#   '/Oeq~  v%7zI#[e {"# ""4#F*LcB bt"    '/Mco|"7BTfn }z#"IS^iy  '/I_kx4BYs  v9Kz]#w "   '/Oeq~ v z1#CDWqy "#!:eu;{2<  '/t >Xcy& vASze# "# 0E"Z#es "#  $,=S_l h)/5 hl h h  '/Rht =S vi{z# }z*M{,7BGOm"?Ww  {$/:EWbq  $,J`lym3n;Fj ""4#F_r  "#  $,J`lym3n;Fj ""4#F_r  "#  $,Oeq~(> vQczu# "#*aomnD nPo  "#BTl   '/G]iv z#%IXds{  '/Lbn{ +9I|".J vz#% @R"e "# "#  '/Mco| }z#"  "*2Yr~ }z1#mn0Ruqy{. }Lazv#*/E av"#~  $,Mco| }z #mn"  %-5^wd.Ttm?nM[} "d ,AzV#x v: j ~;P"e# 7    '/Xq}$ :Ozd#yI vmGnUc3KTr  7 " #B` jt  "*2[t$ :Ozd#yI vz#;eymn>[#6Jr  7!;~_t"#   %-5^w"N jz#  ""~.XQa( : f t @mfnz   $, "#:menqaE2;N3\4hx "#  '/Oeq~"ESl z# !L gyz  $Lg| m5nF] k  '/Oeq~"ESo "# !L gyz  ,To m=nNe s  '/Oeq~"ESl z# !L gyz  $Lg| m5nF] k  '/Oeq~"ESl z# !L gyz  $Lg| m5nF] k  $,4Tjy&Uw z# 7mn  v0Bzw% : Ry O N*2Ub{px; FS{^  $,4OetKnt!lmn  "#% -J `r"#  "5 =V m      2 E U^ gp~     '<E NW lu ~ ! "   %-5^wN_~ z"#} z#'ZR h  $CW, :r(mNnbv   '/Oeq~1z(>_jmn0hzA Wiz{# v: g  "!#7 7   $,J`ly }z#smn&'()D*V+e'sz#'5AZ i,-- ": 90U`123 $CZ z4  "*2Vo{ }z#f/ "!@t~"# 77J7o7 L~" 9]ht  GOWw9()/D"M n " "FP  $,^h:{<%1>x:  $,G]iv:>? :(>J`:r "# "&5 M e }        % = U m        - E ] u  @  l       $ ( , 0 4 8 < @ D H L P T X \ ` d h l p   $,DZfs:BC# =alD :/EQ *2:[t:C>'/?F[G) 0)>HZG)  ))GI[JwK) >)LbLM)  :Z)iM) <)J{RkN) 2)LNn) O&PTQR 3 Z h v S 2       : K :r {  $,Rht: % @Rzd#% v;Mz_#qU$V2iD^o "   $,=S_l:X/H:  $,G]iv:Z 8G[W:  $,=S_l: (:  $,DZfs::-^Ng  '/Rht:8LZp| z#  $,=S_l:a: :  '/Mco|:C'3 Ni z##?  '/Mco|:  d#b uz#  $,DZfs:)(:  $,DZfs:)(:  $,G]iv:[h 8IiV r8:  '/Kkc -6 Tu 6B U6_jn  *2:lGCfu* hn  $,H^jw:2@]Uoil  $,Rht:&8FjmMbx  z#  z2A T6_jo  $,Rht:&8Ff z#5J` z[i 8  (:zkr 8jh  "8  $,Rht:#5Cg z#Bmt| 6j z#2 G_  $,Rht:&8Ff z#5J[ vz#[i 88vZ i8tj zh+ B8  $,G]iv:x 8jH:_u (7zJY{  $,Mco|ah=Vms349JRZbj}ymnX,~OXqX  !"#$21ATyZt~XX %7Og  !)1Xma._syPyi If  7Mp "" #2AP_K  $,Tv  '/Q }z#2g,R{a*@Hm# v  v8Jz\#w #) $7Jas %C &;ANgr ' ( # ~"':b  "*2YwK  $,a )|z#<sVaoC  &!EKU)ts *)K<#W  $,a )|z#<sVaoC  &!EKUts *K<#W  3Sh  3Eb  !)1EK`p{f + ,)/< -EK5X .agt /} 0 1 2 3% 4  5(.; 6DRan 7w} 8|%7M[ 9j|p :q ;u <s =e  >f& ?/5EB @KQ;^ AgmTz Bo CW DY E= FA Gg" H+1w> IGM\`f]s J|_ K` Lb Mc N6AIQY_b~ O  P+ Q7=J RV\i Sud/= TL^o$# U  + L W _ g o u     V    " 8 F WU j {  X   Y   Z   [   \  # ]/ 5 ; ^N T Z _m v            ! > _ n        l   * `9 K \ o u           6AIQY_c~ a% b1=Z{  c+>DWce d.@Qdj } e `+=Sa fp g%06@ hOU_ int~ j k$ l' m n r o(3DINSXax~ \ \ 9 6!1AQaq p qn  i( 2:H J2^ _2j k2I Y28 X2C T2F V2< W2? U2O Z2S [2w www wwwww w$w(w,w0w4w8w<w@wDwHwLwPwTwXw\w`wdwhwlwpwtwxw|wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwww w$w(w,w0w4w8w<w@wDwHwLwPwTwXw\w`wdwhwlwpwtwxw|wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwww w$w(w,w0w4w8w<w@wDwHwLwPwTwXw\w`wdwhwlwpwtw  (,4<@HPT\dhpx| 4 `  <l"$&((X*-/24@6d9=? A4C\EGIKM$OLQtSUWY[<]d_acf h<jllnpr, tX v y { } D t    4 d    $ T     D t   4d(XHx8h(XHxD,\L|   <l8h "($X&(*,.80x2468,:l<>@B,D\FHjaS4 VaS@ VaSLVraS` VaSl V)aSx V2aSVsaSVtaSVuaSVvaSVwaSVxaSVyaSVzaS$V{aS8 V`aSD VbaSP VcaS\ VdaSh VeaStV|aS VlaS VraS VaS VaS VaS VaS VaS VaS VaS VaS VaS  VaS VaS$ VaS0 VaS< VaSH VaST VaS` VaSl VaSx VaS VaS VaS VaS VaS VaS VaS VaS VaS VaS VaS VaS VaS V aS  V aS, VaS8 VaSD VaSP VaS\ V#aSh V$aSt VaS VaS VaS VaSVaSV]aSVhaSVHaSV6aSVAaSVEaSV:aSV>aSVMaSVQaSV!',r B @x VUPb~p-z @$xVXf @\: @lx(V^lp, @xVa#, @xVdO @xVg\I`xE @\y0Vj_ @yVm2?  nj @$zHVqnp @lzVt-BP~ @zVw ($ @{Vzy  @{V}ZV @|V @}`V  Z  V @~@V L! P! @D~@V2 !q "m @~`V " "X @~(V$ #r  #/n @  V O# P#| @,@V #h #qd @lV B% P%L @(V %* %& @$@VM $&y 0&u @d@V & & @@V 0'0' @@V2'^'Z @$@V}@(@( @d@V((l @8V<)M@)~I @܁@Vv)) @@VL*P* @\HV *:*6 @HV[h+p+ @HV+, @4HV,!, @|HVD-r -n @ăHV-- @ HV6.@. @THV=.s.o @PV// @XVo0;p047 @DVn114 @ԅV224 @dVP$4047 @Vg5p54 @V66~6Ez @V78H @VH9EP9PA @$Vk2:zip[ @V?; @Vz @ČV%m$}p$y @D0V'(  @t@VK++ @hV,, @V]D.P. @V/4/G0 @Vo71@1 @V  3S3O @<V44 @ܔV6d6` @tV88e @$V(6;s@;Ho @̖V== @VJ{?? @LV kA* pA& @V#f 8D @D @ęV& GE! GA! @V)!>J!@J! @V,#"^Ms"`M1o" @V/"O"Od" @4V2;#R#R# @ V5#U$U $ @V8W$Y$Y$ @V;$L\/%P\+% @tV>k%@_%@_E% @tpVA%c.&c*& @HVDi&Ng&Pg& @,VG'ViP'`iL' @VJ'n'n' @VM (qT(qP( @VP(t(t( @xVS)tyb)y^) @lVV)L{)P{ ) @hVY4*\*`4* @V\*++ @D`V_P++4+ @Vb+Ԉ-,), @dVej,,}, @lVh,}=- 9- @Vkx--- @Vn-Q=.`9. @| Vqn.~.. @pVt. 3/// @ pVwl/// @|pVz/;50@10 @pV}r0˾0о0 @\(V0v@1<1 @0V|111 @V 2AY2PU2 @tV222 @t`V?3,u30Kq3 @(V3{33 @xVA44 4 @tV455 @dVW55[5 @V6U6666 @V7`7\7 @|V7xt7 @4V7;8_78 @V8P8`{ 8 @V9k9 g9 @HV99S9 @4VB:T:`: @V: ;3; @\VX;D;Pp; @V;G</C< @dV<<-< @V= p= Ql= @V=r  > > @lVU>Z>`3> @xV>3?3/? @xVs??? @ V?7@3@ @Vm@.@0@ @L8V@AlA @VSA,A0A @ VA8)B@%B @(VcBB+B @`VB "2C"n.C @L(VmC~%C%KC @tpVC)sI>.oI @VI>J> J @xV J@J@J @l`VJAXKATK @8VK^E L`E L @8VaLHLIL @<0VhMIMIM @l0V9N/JN0JN @ VN_N_FN @8V !O8`O @V"-O@`@|O@`O\`O{`O`O @ V(O`O @ V*1P`-P @4 V,aP`]P @T V.P`P @t V0PaP @ V2P(aP @ V4 Q@aQ @ V64QXa0Q @ V8_Qpa[Q @ V:QaQ @4 V<QaQ @TV>QaQa|@Q @lVA#R@d@R @\VC9Re@LRi@_Rl@rRn@Ro@Rp@R@q@Rq`@R rR$r S$rS$r:S0(r(CSPrWSPrSS @VShS|LW |.IJXString.o/ 1560953083 501 20 100644 6784 ` ELF4(+(#D$@@D$D$UWVSd$ċE uFD$U$UU}$|$U$UU$tW$PT$UU <$D$ T$D$L$Fe[^_]Ðt&말Fe[^_]UWVSd$ԋD$@t$DT$Ht$T$T$D$@PtnT$B$T$ǃr1u.uL$@d$,[^_]Í . /ލ&fftߍ&1UWVSd$ċu} t$|$E$EE}$|$U$UU$tU$PT$UU <$D$ T$D$L$Fe[^_]Ív멐Fe[^_]UWVSd$ԋt$DD$@@4$l$8‹D$@T$PB$T$ǃsJ1u+uL$@d$,[^_]Ív . /፴&fftߍ&1t؋D$@@d$,[^_]UVSd$t$ t Vt$l$Fd$[^]USd$D$ xt $l$d$[]UVSd$4$t$D$$d$[^]$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0D8XAB C AAA F YAAA <AC AAO@h AA AAG 8AB C AAA D YAAA PAA AAO@] AA AAD MAA AA0dDAA AO nA AA(.AA O Z AA$FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN6jxcore8JXStringC2Ev.text._ZN6jxcore8JXStringC2Ev.text.unlikely._ZN6jxcore8JXStringdeEv.text._ZN6jxcore8JXStringdeEv.text.unlikely._ZNK6jxcore8JXStringdeEv.text._ZNK6jxcore8JXStringdeEv.text.unlikely._ZN6jxcore8JXStringC2EN2v86HandleINS1_5ValueEEEPv.rel.text._ZN6jxcore8JXStringC2EN2v86HandleINS1_5ValueEEEPv.text.unlikely._ZN6jxcore8JXString10SetFromSTDEPKciPv.rel.text._ZN6jxcore8JXString10SetFromSTDEPKciPv.text.unlikely._ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb.rel.text._ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb.text.unlikely._ZN6jxcore8JXStringC2EPKcPv.rel.text._ZN6jxcore8JXStringC2EPKcPv.text.unlikely._ZN6jxcore8JXString7DisposeEv.rel.text._ZN6jxcore8JXString7DisposeEv.text.unlikely._ZN6jxcore8JXStringD2Ev.rel.text._ZN6jxcore8JXStringD2Ev.text.unlikely._GLOBAL__sub_I_JXString.cc.rel.text.startup._GLOBAL__sub_I_JXString.cc.rel.init_array.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group     F(" "#%&$7Og  #4QXt  OkrD..JXString.cc_GLOBAL__sub_I_JXString.cc_ZStL8__ioinit_ZN6jxcore8JXStringC2Ev_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXStringdeEv_ZNK6jxcore8JXStringdeEv_ZN6jxcore8JXStringC2EN2v86HandleINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZNK2v85Value8ToStringEv_ZNK2v86String18MayContainNonAsciiEv_ZNK2v86String10Utf8LengthEvcalloc_ZN4node16WRITE_UTF8_FLAGSE_ZNK2v86String9WriteUtf8EPciPii_ZNK2v86String6LengthEv_ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXString10SetFromSTDEPKciPvfreemalloc_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZN6jxcore8JXStringC2EPKcPvstrlen_ZN6jxcore8JXStringC1EPKcPv_ZN6jxcore8JXString7DisposeEv_ZN6jxcore8JXStringD2Ev_ZN6jxcore8JXStringD1Ev_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit' (5)J)[*j+,-./' (/2M3' (%2?)T)e*t+,-./' (/6G3' (+2' (#8' ( ;( <2=:> 4H \ h#4)'<!<'<,<S@qV`hpxB> @P) z^` @h )2 . @X)v @ )D @)$G0.C @)e^`F @08) @h) 0( @pX)&* *" &/135 1560953086 501 20 100644 130132 ` ELF4(UW}VSd$ĉ<$UUЍED$$T$EUԃEЉT$$Eԃ4$D$<$e[^_]ArrayBuffersliceInt8ArrayBYTES_PER_ELEMENTUint8ArrayUint8ClampedArrayInt16ArrayUint16ArrayInt32ArrayUint32ArrayFloat32ArrayFloat64ArraylengthbyteOffsetbufferWrong number of arguments.Offset may not be negative.Offset out of range.Offset/length out of range.byteLengthByte offset out of range.Length out of range.Length is out of range.Byte offset is not aligned.Type errorlength > kMaxLengthDataViewbyteLength out of range.byteOffset out of range.Index out of range.getUint8getInt8getUint16getInt16getUint32getInt32getFloat32getFloat64setUint8setInt8setUint16setInt16setUint32setInt32setFloat32setFloat64getsetsubarrayUWVSd$t t,7e[^_]Ëp uԉME؉$ED$ ED$‰$D$UD$EЋMD$$MEԃM̉D$ $M̋EЉL$$UԃD$$UM̋ED$ D$L$$EԃD$D$ D$EЉ$D$EЋUD$$UUȃED$ T$UD$$M̋ɋMtMЋM̉Uȉ $UȉƋMЋ  Eĉ$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UWVSd$‹tLt,7e[^_]ËHLuԉUE؉$ED$ ED$ $D$MD$EЋUD$$UEԃỦD$$ŰEЉT$$MԃD$ $MED$$EԍML$EċED$$EăUD$ D$Eԉ$D$ED$$EԃMD$EċEЉL$$EăMD$ D$Eԉ $D$EЋUD$ D$$T$Eԃ}uEH ljMċED$D$ WEЉT$$EЃD$O$uԉL$UԃED$ t$T$$;}u}Uu}tẺMȉUЉ$MȉƋUЋLLE$e[^_]UVSd$M xu;})ʉe[^]ÍEU$EUe[^]UWVuSd$D$D$4$} EԃD$G4$D$Eԃ$‹GG$UUOGỦMЃ$MЋU̅79Bʅ<9C9ʍ4$D$ND$UĉMEԃD$G4$D$Eԃ$E̍4$D$D$EԃM܉MȉD$G $D$}̃4$}Љ|$UăEԉ4$+UЉET$EԃEEԉ4$D$EԃMȉ4$D$D$L$ uEԉe[^_]ɉ1Ʌ1fv4$UEԃUNUWVuSd$D$D$4$} EԃD$G4$D$Eԃ$‹GG$UUOGỦMЃ$MЋU̅79Bʅ<9C9ʍ4$D$ND$UĉMEԃD$G4$D$Eԃ$E̍4$D$D$EԃM܉MȉD$G $D$}̃4$}Љ|$UăEԉ4$+UЉET$EԃEEԉ4$D$EԃMȉ4$D$D$L$ uEԉe[^_]ɉ1Ʌ1fv4$UEԃUNUWVuSd$D$D$4$} EԃD$G4$D$Eԃ$‹GG$UUOGỦMЃ$MЋU̅79Bʅ<9C9ʍ4$D$ND$UĉMEԃD$G4$D$Eԃ$E̍4$D$D$EԃM܉MȉD$G $D$}ЃẺ4$xD$UăEԉ4$)T$EEԃEEԉ4$D$EԃMȉ4$D$D$L$ }Eԉe[^_]t&ɉ1Ʌ1fv4$UEԃUNUWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$ċu VF$u&Eԉ$EԃUEe[^_]vF~AF}ԉ$D$F<$D$EԃMEe[^_]t&}ԉ<$Eԃ벐t&u؍}ԉ4$<$D$D$Eԃ<$D$EԃD$E$4$Ee[^_]UWVSd$u ~F$uFVF}ԉ$&<$EԃMEe[^_]t&~F}ԍPUЉ$UЉD$T$F$뢍&u؍}ԉ4$D$<$D$Eԃ<$D$EԃD$E$4$Ee[^_]}ԉ<$NEԅɉE<$Eԃ<}ԉ<$Eԃ$FFEЉEЉD$Eԉ$~kF$~F$D$<$T$ẺUUЃEԉ<$T$D$Eԃ$UD$<$T$EEԃD$V<$BD$Eԃ$9E+E9E-EЉ$EЋF$ME̋UЉL$$T$v~>F$pD$<$T$UEԃ<$D$EЉD$Eԃ$UD$<$T$EEԃD$F<$D$Eԃ$Eȃ~#F$UȉE9)ȋM9!1҅}ȉ EЉ|$D$Eȉ$EԃD$ED$F$;}u}L<$Eԃt&<$Eԃt&<$EԃE}ԉ<$EԃE&u؍}ԉ4$D$ &u؉4$D$D$<$Eԃ<$D$t&<$Eԃƒ~V<$Eԃt&E؍}ԉ$ED$ D$<$D$EԃD$<$ED$EԃD$E$E<$D$MԃD$ $MED$ D$<$D$Eԃu EƉMĐED$D$ V<$T$UԃD$N<$UЉL$UЃED$ T$Uԉ$T$;uuEu t $E̋EM̉E$vt&PzY@ KE+ẺE&Hy,ΐ<$Uԃt&Et&<$Eԃ u؉4$D$UWVSd$u ~F$uFVF}ԉ$&<$EԃMEe[^_]t&~F}ԍPUЉ$UЉD$T$F$뢍&u؍}ԉ4$D$<$D$Eԃ<$D$EԃD$E$4$Ee[^_]}ԉ<$NEԅɉE<$Eԃ<}ԉ<$Eԃ$FFEЉEЉD$Eԉ$~kF$~F$D$<$T$ẺUUЃEԉ<$T$D$Eԃ$UD$<$T$EEԃD$V<$BD$Eԃ$9E4+E9EEЉ$EЋF$MЋUȉL$MT$$t&~6F$hD$<$T$UEԃ<$D$EЉD$Eԃ$UD$<$T$EEԃD$F<$D$Eԃ$Eă~F$E9EPEċM+E9R1҅}ĉ׉'EЉ|$D$Eĉ$EԃD$ED$F$;}u}L<$Eԃt&<$Eԃt&<$EԃEF$pD$<$T$UEԃ<$D$EЉD$Eԃ$UD$<$T$EEԃD$F<$D$Eԃ$Eă~F$E9EXEċM+E9Z1҅}ĉEЉ|$D$Eĉ$EԃD$ED$F$;}u}L<$Eԃt&<$Eԃt&<$EԃEF$pD$<$T$UEԃ<$D$EЉD$Eԃ$UD$<$T$EEԃD$F<$D$Eԃ$Eă~F$E9E/EċM+E9Z1҅}ĉEЉ|$D$Eĉ$EԃD$ED$F$;}u}L<$Eԃt&<$Eԃt&<$EԃEfu؍}ԉ4$D$zUWVSd$u ~NF$~E~F$EӋF$$VEčB$1ɃUȃmĉM9Us_F$ǃ~Fuԃ$MӉfDf4$Eԃ}Ee[^_]fw9Evu؍}ԉ4$D$D$<$Eԃ<$D$EԃD$E$4$Ee[^_]fuԉ4$Eԃ>fu؍}ԉ4$D$zUWVSd$u ~NF$~E~F$EӋF$$NEčA$1ɃUȃmĉM9Us_F$ǃ~Fuԃ$}D‰4$Eԃ}Ee[^_]&w9Evu؍}ԉ4$D$D$<$Eԃ<$D$EԃD$E$4$Ee[^_]fuԉ4$Eԃ>fu؍}ԉ4$D$zUWVSd$u ~NF$~E~F$EӋF$$NEčA$1ɃUȃmĉM9Us_F$ǃ~Fuԃ$}D‰4$Eԃ}Ee[^_]&w9Evu؍}ԉ4$D$D$<$Eԃ<$D$EԃD$E$4$Ee[^_]fuԉ4$Eԃ>fu؍}ԉ4$D$zUVSd$4$t$D$$d$[^] '2=FNXakt          $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| ,~AB ADCoAAA 8LAB ADr CAA A AAA 8AB ADr CAA A {AAA 8AB ADr CAA A {AAA 8AB ADr CAA A {AAA 8<AB ADr CAA A {AAA 8xAB ADr CAA A {AAA 8AB ADr CAA A {AAA 8AB ADr CAA A {AAA 8,AB ADr CAA A {AAA 8hAB ADr CAA A {AAA 0XAB Bj AA G ]AA 0!AB BD CAA I 0 !AB BD CAA I 0@!AB BD CAA G HtAB CI AAA F } AAA H yAAA HAB CI AAA F } AAA H yAAA H AB CI AAA F } AAA H yAAA HXAB CI AAA F } AAA H yAAA HAB CI AAA F } AAA H yAAA HAB CI AAA F } AAA H yAAA H<AB CI AAA F } AAA H yAAA HAB CI AAA F } AAA H yAAA HAB CI AAA F } AAA H yAAA < AB Cg AAA H  AAA D <`AB Cg AAA H  AAA D <AB Cg AAA H  AAA D <<AB C AAA H 9 AAA D l AB C" AAA E H AAA E  AAA H  AAA H $ AAA I lAB C AAA H H AAA E  AAA G  AAA H $ AAA I lAB C AAA H H AAA E  AAA G  AAA H $ AAA I lpAB C AAA H H AAA E  AAA G  AAA H $ AAA I lAB C" AAA E H AAA E  AAA H  AAA H $ AAA I lP AB C AAA H H AAA E  AAA G  AAA H $ AAA I L AB C\ AAA C h AAA E ^ AAA G 0 AB AE CAA E 0D AB AE CAA D 0x AB AE CAA D 0 AB AE CAA D 0 AB AE CAA D 0 AB AE CAA D LH !AB C^ AAA I a AAA D y AAA D < AB Cg AAA H  AAA D < AB Cg AAA H  AAA D < AB Cg AAA H  AAA D <X AB Cg AAA H  AAA D < AB Cg AAA H  AAA D < AB Cg AAA H  AAA D l AB C2 AAA E  AAA E } AAA H k AAA J  AAA C l AB C2 AAA E  AAA E } AAA H k AAA J  AAA C l AB C2 AAA E  AAA E } AAA H k AAA J  AAA C 0hAB ED AAA C !(sAB CiAAA <AB C AAA C h AAA E <AB C AAA E h AAA E <\AB C AAA J h AAA E <~AB C AAA J h AAA E <NAB C AAA G h AAA E <NAB C AAA G h AAA E <\fAB C AAA J h AAA E <^AB C AAA D h AAA E <^AB C AAA H h AAA E <^AB C AAA H h AAA E <\yAB C AAA D h AAA E <yAB C AAA D h AAA E <AB C AAA E h AAA E <AB C AAA E h AAA E <\AB C AAA J h AAA E <AB C AAA J h AAA E $FAB B~AA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4nodeL15ThrowRangeErrorEPKc.rel.text._ZN4nodeL15ThrowRangeErrorEPKc.rodata.str1.1.text.unlikely._ZN12_GLOBAL__N_111ArrayBuffer11GetTemplateEv.rel.text._ZN12_GLOBAL__N_111ArrayBuffer11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE11GetTemplateEv.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE11GetTemplateEv.rel.text._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE11GetTemplateEv.text.unlikely._ZNK2v89ArgumentsixEi.isra.3.rel.text._ZNK2v89ArgumentsixEi.isra.3.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE3getERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE3getERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_111ArrayBuffer5sliceERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_111ArrayBuffer5sliceERKN2v89ArgumentsE.rodata.str1.4.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_111ArrayBuffer5V8NewERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_111ArrayBuffer5V8NewERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE8subarrayERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE8subarrayERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView5V8NewERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView5V8NewERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE3setERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE3setERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE5V8NewERKNS1_9ArgumentsE.rel.text._ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE5V8NewERKNS1_9ArgumentsE.text.unlikely._ZN14v8_typed_array14AttachBindingsEN2v86HandleINS0_6ObjectEEE.rel.text._ZN14v8_typed_array14AttachBindingsEN2v86HandleINS0_6ObjectEEE.text.unlikely._ZN14v8_typed_array25SizeOfArrayElementForTypeEN2v817ExternalArrayTypeE.rel.text._ZN14v8_typed_array25SizeOfArrayElementForTypeEN2v817ExternalArrayTypeE.text.unlikely._ZN12_GLOBAL__N_111ArrayBuffer12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.rel.text._ZN12_GLOBAL__N_111ArrayBuffer12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely._ZN12_GLOBAL__N_18DataView10setFloat64ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView10setFloat64ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView10setFloat32ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView10setFloat32ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView10getFloat64ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView10getFloat64ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView10getFloat32ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView10getFloat32ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView8getUint8ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView8getUint8ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView7getInt8ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView7getInt8ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView9getUint16ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView9getUint16ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView8getInt16ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView8getInt16ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView9getUint32ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView9getUint32ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView8getInt32ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView8getInt32ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView8setUint8ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView8setUint8ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView7setInt8ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView7setInt8ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView9setUint16ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView9setUint16ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView8setInt16ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView8setInt16ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView9setUint32ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView9setUint32ERKN2v89ArgumentsE.text.unlikely._ZN12_GLOBAL__N_18DataView8setInt32ERKN2v89ArgumentsE.rel.text._ZN12_GLOBAL__N_18DataView8setInt32ERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_v8_typed_array.cc.rel.text.startup._GLOBAL__sub_I_v8_typed_array.cc.rel.init_array.rodata.CSWTCH.521.rel.data.rel.ro.local._ZZN12_GLOBAL__N_18DataView11GetTemplateEvE7methods.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE11GetTemplateEvE2id.rel.data.rel.ro.local._ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE11GetTemplateEvE7methods.data._ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE11GetTemplateEvE2id.data._ZZN12_GLOBAL__N_111ArrayBuffer11GetTemplateEvE2id.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group~   2 `o<Y O QI B ?i A]9 2l   /  c "#1 #  `) %& & " fy () X)+, !,./H !/12 !245 578Q8:;;=>>@APACDDFGGIJOJLMMOPPRSNSUVVXY[\]_`bcefhiklnosqrFrtuuwxxz{T{}~~b!sr$ D}~NN!fX^^^y1yf @Fap u z  . 9 K V b m y          N @[ 9  [f  h[[ $ * 0[6 <Rh41o  Jg@Y 2 o   A!!!!! "o""!" #G#r######$$3$v8_typed_array.cc_ZN4nodeL15ThrowRangeErrorEPKc_ZN12_GLOBAL__N_111ArrayBuffer11GetTemplateEv_ZZN12_GLOBAL__N_111ArrayBuffer11GetTemplateEvE2id_ZN12_GLOBAL__N_111ArrayBuffer5V8NewERKN2v89ArgumentsE_ZN12_GLOBAL__N_111ArrayBuffer5sliceERKN2v89ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE11GetTemplateEv_ZZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE11GetTemplateEvE2id_ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE5V8NewERKNS1_9ArgumentsE_ZZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE11GetTemplateEvE7methods_ZNK2v89ArgumentsixEi.isra.3_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE3getERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE2EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_111ArrayBuffer12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE5EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj8ELN2v817ExternalArrayTypeE8EE8subarrayERKNS1_9ArgumentsE_ZN12_GLOBAL__N_18DataView5V8NewERKN2v89ArgumentsE_ZZN12_GLOBAL__N_18DataView11GetTemplateEvE7methods_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE7EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj4ELN2v817ExternalArrayTypeE6EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE9EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE3EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj1ELN2v817ExternalArrayTypeE1EE3setERKNS1_9ArgumentsE_ZN12_GLOBAL__N_110TypedArrayILj2ELN2v817ExternalArrayTypeE4EE3setERKNS1_9ArgumentsECSWTCH.521_ZN12_GLOBAL__N_18DataView10setFloat64ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView10setFloat32ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView10getFloat64ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView10getFloat32ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView8getUint8ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView7getInt8ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView9getUint16ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView8getInt16ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView9getUint32ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView8getInt32ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView8setUint8ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView7setInt8ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView9setUint16ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView8setInt16ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView9setUint32ERKN2v89ArgumentsE_ZN12_GLOBAL__N_18DataView8setInt32ERKN2v89ArgumentsE_GLOBAL__sub_I_v8_typed_array.cc_ZStL8__ioinit.LC1.LC2.LC4.LC5.LC7.LC9.LC11.LC13.LC15.LC17.LC19.LC21.LC24.LC25.LC26.LC30.LC40.LC41.LC42.LC46.LC50.LC54.LC48.LC49.LC52.LC53.LC51.LC61.LC62.LC71.LC74.LC70.LC72.LC73.LC88__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v86String3NewEPKci_ZN2v89Exception10RangeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v811HandleScopeD1Ev_ZN4node7commons11getInstanceEv_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v89Signature3NewENS_6HandleINS_16FunctionTemplateEEEiPS3__ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v87Integer3NewEi_ZN2v89UndefinedEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZNK2v85Value11Uint32ValueEv_ZNK2v85Value10Int32ValueEv_ZN2v816FunctionTemplate11GetFunctionEv_ZNK2v88Function11NewInstanceEiPNS_6HandleINS_5ValueEEE_ZNK2v85Value8IsNumberEv_ZN2v86Object3GetEj_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZNK2v85Value8IsObjectEv_ZN2v86Object3SetEjNS_6HandleINS_5ValueEEE_ZN2v816FunctionTemplate11HasInstanceENS_6HandleINS_5ValueEEE_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEvmemmove_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN4node23FromConstructorTemplateEN2v810PersistentINS0_16FunctionTemplateEEERKNS0_9ArgumentsE_ZN2v87Integer15NewFromUnsignedEj_ZN2v86Object39SetIndexedPropertiesToExternalArrayDataEPvNS_17ExternalArrayTypeEi_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEEcalloc_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V837AdjustAmountOfExternalAllocatedMemoryEi_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN14v8_typed_array14AttachBindingsEN2v86HandleINS0_6ObjectEEE_ZN14v8_typed_array25SizeOfArrayElementForTypeEN2v817ExternalArrayTypeE__x86.get_pc_thunk.cx_ZN2v86Object41GetIndexedPropertiesExternalArrayDataTypeEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectEfree_ZNK2v85Value12BooleanValueEv_ZNK2v85Value11NumberValueEv_ZN2v86Number3NewEd_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit 1 2!3>4S5e6p7 1 28 H m3 9 4:;<=7 vF9O l4> ? 7 1 28 H m3 9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 y9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 }9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 {9 4:;<@ 94]>p@4>= 9:4[>f ? 7 1 28 H m3 9 4:;<@ 94]>p@4>= 9:4[>f ? 71 2BA 1 2 14MB[CvDD 4BC %4GB\@w@EFA 1 2 14MB[CvDD 4BC %4GB\@w@EFA 1 2 14MB[CvDD 4BC %4GB_@y@"EFA1 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*G9AiCHA3 4I671 2*GGJWACK3 4I67'ACA_AmJLDC 4B&C@4\BjCMMND 4B C:4VBdCCHK A$A<AU Zm rAA 3 451 2*GGJWACK3 4I67'ACA_AmJ@LDC 4B&C@4\BjCMMND 4B(CB4^BlCCHK A$A<AU Zm rAA 3 451 2*GGJWACK3 4I67'ACA_AmJ.LDC 4B&C@4\BjCMMND 4B(CB4^BlCCHK A$A<AU Zm rAA 3 451 2% <4XBfCD@ EFAD/OO3 4I67A1 29 KLoPDC 7AT(jQJFD C4RD SEtFS  4T.RN4uTR 4TR 4'TLAdA} A ! 4+B9CMR] lEFOSH1KlADCA:MkSt  "3 #4U67A4ALAoO $AA %1 29 KLoPDC 7AT:jQJFD C5RE TEuFS  4 T/RO4vTR 4TR 4(TLAdA} A ! 4+B9CNR^ mEFOSH1KlADCA:MkSt  "3 #4U67A4ALAoO $AA %1 29 KLoPDC 7AT4jQJFD C5RE TEuFS  4 T/RO4vTR 4TR 4(TLAdA} A ! 4+B9CNR^ mEFOSH1KlADCA:MkSt  "3 #4U67A4ALAoO $AA %1 29 KLoPDC 7AT@jQJFD C5RE TEuFS  4 T/RO4vTR 4TR 4(TLAdA} A ! 4+B9CNR^ mEFOSH1KlADCA:MkSt  "3 #4U67A4ALAoO $AA %1 29 KLoPDC 7AT"jQJFD C4RD SEtFS  4T.RN4uTR 4TR 4'TLAdA} A ! 4+B9CMR] lEFOSH1KlADCA:MkSt  "3 #4U67A4ALAoO $AA %1 29 KLoPDC 7AT.jQJFD C5RE TEuFS  4 T/RO4vTR 4TR 4(TLAdA} A ! 4+B9CNR^ mEFOSH1KlADCA:MkSt  "3 #4U67A4ALAoO $AA %1 27DUCvVWR 4TS X2?; LYoA}D3 $ Q3 &4 5 6+7DA_3h 'y4I 1 2 .4PB^CDD 4BC" 14VBj@@8 EF7AX 3 9 4:;<@) ;4_>o@4>=  9-4Q>\ v?| 7 1 2 .4PB^CDD 4BC" 14VBk@@8 EF7AX 3 9 4:;<@) ;4_>o@4>= 9-4Q>\ v?| 7 1 2 .4PB^CDD 4BC" 14VBk@@8 EF7AX 3 y9 4:;<@) ;4_>o@4>= 9-4Q>\ v?| 7 1 2 .4PB^CDD 4BC" 14VBk@@8 EF7AX 3 {9 4:;<@) ;4_>o@4>= 9-4Q>\ v?| 7 1 2 .4PB^CDD 4BC" 14VBk@@8 EF7AX 3 }9 4:;<@) ;4_>o@4>= 9-4Q>\ v?| 7 1 2 .4PB^CDD 4BC" 14VBk@@8 EF7AX 3 9 4:;<@) ;4_>o@4>= 9-4Q>\ v?| 71 24JW iL|PCDDC7M[Sd u4TR 4TR '4NTz3 (4I678QA73GAj3x 3 )45AA3+ ?9Y *b4w:;<= 94A>X?r7A +A 3 ,1 2*GGJWACK3 4I67'ACA_AmJ:LDC 4B&C@4\BjCMMND 4B(CB4^BlCCHK A$A<AU ZlAA 3 45 3 1 2*GGJWACK3 4I67'ACA_AmJ4LDC 4B&C@4\BjCMMND 4B(CB4^BlCCHK A$A<AU ZlAA  3 453 1 2*GGJWACK3 4I67'ACA_AmJLDC 4B&C@4\BjCMMND 4B C:4VBdCCHK A$A<AU ZlAA 3 45 3 1 2*GGJWACK3 4I67'ACA_AmJ"LDC 4B&C@4\BjCMMND 4B(CB4^BlCCHK A$A<AU ZlAA  3 453 1 2*GGJWACK3 4I67'ACA_AmJLDC 4B&C@4\BjCMMND 4B C:4VBdCCHK A$A<AU ZlAA  3 453 1 2*GGJWACK3 4I67'ACA_AmJ(LDC 4B&C@4\BjCMMND 4B(CB4^BlCCHK A$A<AU ZlAA 3 45 3 1 29 KLoPDC A*QRJFDCR E/FS  4TR 40T?RH b4TR 4TAA4Am !r  4BC R0 ?E`FOSHKLAmDCA3% "14C5a6l73 #4UAA A/O] $bzMS AA1 29 KLoPDC A*QRJFDCR E/FS  4TR 40T?RH b4TR 4TAA4Am !r  4BC R0 ?E`FOSHKLAmDCA3% "14C5a6l73 #4UAA A/O] $bzMS AA1 29 KLoPDC A*QRJFDCR E/FS  4TR 40T?RH b4TR 4TAA4Am !r  4BC R0 ?E`FOSHKLAmDCA3% "14C5a6l73 #4UAA A/O] $bzMS AA 1 2%3, ;ED ^4TE 4TE 43T:IER l4T"E 4T(E  4ATH.WE` z4T4E 4T: E .4OTV@eEy 4T8 *E4T"7:3H \9|4:;<= 9=4a>x?7\ 2 1 2M']/[;PJXR^^_f`1 2)DCaT]\[mPMbA3 -4-IB6M7wA3 1 2)DCaT]\[mPMbA3 -4-IB6M7gA3 1 2*CDaU]][nPMc3 -4%I:6E7r3 1 2*CDaU]][nPMc3 - 4I26=7j3x 1 2*C@aN]V[gPMR3 -4I67:3H 1 2*C@aN]V[gPM@3 -4I67:3H 1 2*CDaU]][nPMR3 -4I*657R3` 1 2*CDaU]][nPM@3 -4 I"6-7J3X 1 2*CDaU]][nPMR3 -4 I"6-7J3X 1 2*CDaU]][nPM@3 -4 I"6-7J3X 1 2)D?aM]U[fPMCA3 -4 I"6-7GAb3p 1 2)D?aM]U[fPMDA3 -4 I"6-7GAb3p 1 2)DCaT]\[mPMCA3 -4%I:6E7_Az3 1 2)DCaT]\[mPMDA3 -4%I:6E7_Az3 1 2)DCaT]\[mPMCA3 -4%I:6E7_Az3 1 2)DCaT]\[mPMDA3 -4%I:6E7_Az3 1 2 d( e2f:g  $(,048<@DHLPTX\`dhlptx|^ pX a g sj [ OOU IId mLLR  P @"|(.40:l@FILDOxRUX\[^a@dgj$mdpsv$y{}tT   H |    L    \      l ` ` ` `#84\#8<1D!D'D,D^P~Z @l82ip @ Zh`d @\  @Dq   @,&   @_<`8 @  @E @̅ [W @#_`  @&d  X @)x$!  @,  ! @D/Q " "! @2 % % @h5 /&I 0&E @h8 O' P' @dh;g o( p( @̋h>* ) ) @4hA *U*Q @hD++ @hGs,, @lhJ6.. @ԍhM//a@/ ] @<PG4$`4  @Sg99  @̑VB>>< @Y2ABBB > @D]K K  @Ė`fTT  @Dc-]]  @ěff^f Z @Dio%o ! @Ġlxx @Do 4{v@{r @DxrC? @xu  @4xxpCP @x{= @$x~ ws @xS`!  @V  @  } @ݧD  @ @ ! ! @b!!  ! @l%"="@ " @D"]R#` N# @#I$` $ @v$I$` $ @=%I%` % @H%/&!+& @}&!&0s& @P2'~'z' @L'Y (`( @H((( @|()~) @^))N) @)^+*`N'* @f**f* @*6+ ^2+ @$r+~+^+ @+B,^>, @4~,>,@y, @-K-yG- @T-9-@- @ .V.R. @.q.. @/b/ ^/ @//F/ @L800 @0 $ (0@$0 @s0 o0 @@0 ;1@ 71 @@1`2 1 @ @n22 2 @L@633 3 @@3 [4@ W4 @@4`#5 5 @ @55 5 @L@V66 6 @@7 w7$7(7(7,700(8X8X(8 @H *8D1 ,[@$database.o/ 1560953085 501 20 100644 71720 ` ELF4( !#$GH/0235689;<>?ABJKVWMNbcPQ_`STefUWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]USd$L$ $T$ T$QT$d$[]USd$L$ $T$ T$QT$d$[]UVSd$t$ FUWVSd$}uu_$ tnU HUPW?ABDEGHJKMNPQSTVWYZ\]_`bcefhiklnoqrtuwxy{|~ (7w=wC wIOwUw[/wa5wg:wm@wsEwyKwiwrwwwwwww4w " K~     B" %=-"!Xf"$!f"$*F'br+iF*) iu=-"00CXah"3"6K"9=SK"<K"?L"BREl"H"K(!Ln"K"N! "N, "QU !} "Q "T ! "T> "Wc Z   |  " tlU ]  y "` "c& "fY f x  o    ,r 7 N q    Wtk$Bd%6zRFCQA{"!:"YS""2J !"m[q)[!]c database.cc_GLOBAL__sub_I_database.cc_ZStL8__ioinit.LC30.LC31.LC33.LC34.LC38.LC39.LC40.LC41.LC42.LC44.LC46.LC53.LC62.LC63.LC64.LC65.LC68.LC71.LC72.LC73.LC74.LC76_ZN4node10ObjectWrapD5Ev_ZN12node_sqlite38Database5BatonD5Ev_ZN12node_sqlite38Database9ExecBatonD5Ev_ZN12node_sqlite38Database9OpenBatonD5Ev_ZN12node_sqlite38Database18LoadExtensionBatonD5Ev_ZN12node_sqlite38DatabaseD5Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN12node_sqlite38Database14Work_BeginExecEPNS0_5BatonEuv_default_loop_ZN12node_sqlite38Database14Work_AfterExecEP9uv_work_s_ZN12node_sqlite38Database9Work_ExecEP9uv_work_suv_queue_work_ZN12node_sqlite38Database23Work_BeginLoadExtensionEPNS0_5BatonE_ZN12node_sqlite38Database23Work_AfterLoadExtensionEP9uv_work_s_ZN12node_sqlite38Database18Work_LoadExtensionEP9uv_work_s_ZN12node_sqlite38Database14SetBusyTimeoutEPNS0_5BatonEsqlite3_busy_timeout_ZN5AsyncISsN12node_sqlite38DatabaseEE8listenerEP10uv_async_sipthread_mutex_lockpthread_mutex_unlockuv_unref_ZdlPv_ZN5AsyncIN12node_sqlite38Database11ProfileInfoES1_E8listenerEP10uv_async_si_ZN5AsyncIN12node_sqlite38Database10UpdateInfoES1_E8listenerEP10uv_async_si_ZN5AsyncISsN12node_sqlite38DatabaseEE5closeEP11uv_handle_spthread_mutex_destroy_ZN5AsyncIN12node_sqlite38Database11ProfileInfoES1_E5closeEP11uv_handle_s_ZN5AsyncIN12node_sqlite38Database10UpdateInfoES1_E5closeEP11uv_handle_s_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN12node_sqlite38Database13TraceCallbackEPvPKc_Znwj_ZNSsC1EPKcRKSaIcEuv_refuv_async_sendmemmove_ZN4node10ObjectWrapD0Ev_ZN12node_sqlite38Database5BatonD2Ev_ZTVN12node_sqlite38Database5BatonE_ZNSs4_Rep20_S_empty_rep_storageE_ZNSs4_Rep10_M_destroyERKSaIcE_ZN12node_sqlite38Database5BatonD1Ev_ZN12node_sqlite38Database9ExecBatonD2Ev_ZTVN12node_sqlite38Database9ExecBatonE_ZN12node_sqlite38Database9ExecBatonD1Ev_ZN12node_sqlite38Database9OpenBatonD2Ev_ZTVN12node_sqlite38Database9OpenBatonE_ZN12node_sqlite38Database9OpenBatonD1Ev_ZN12node_sqlite38Database18LoadExtensionBatonD2Ev_ZTVN12node_sqlite38Database18LoadExtensionBatonE_ZN12node_sqlite38Database18LoadExtensionBatonD1Ev_ZN12node_sqlite38Database5BatonD0Ev_ZN12node_sqlite38Database23RegisterProfileCallbackEPNS0_5BatonEsqlite3_profileuv_close_ZN12node_sqlite38Database15ProfileCallbackEPS0_PNS0_11ProfileInfoEpthread_mutex_inituv_async_init_ZN12node_sqlite38Database15ProfileCallbackEPvPKcy_ZN12node_sqlite38Database21RegisterTraceCallbackEPNS0_5BatonEsqlite3_trace_ZN12node_sqlite38Database13TraceCallbackEPS0_PSs_ZN12node_sqlite38Database9OpenBatonD0Ev_ZN12node_sqlite38Database9ExecBatonD0Ev_ZN12node_sqlite38Database18LoadExtensionBatonD0Evsqlite3_exec_ZNSs6assignERKSssqlite3_free_ZN12node_sqlite38Database9Work_OpenEP9uv_work_ssqlite3_open_v2sqlite3_errmsgsqlite3_close_ZN12node_sqlite38Database14UpdateCallbackEPviPKcS3_xsqlite3_enable_load_extensionsqlite3_load_extension_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN2v86String3NewEPNS_7IsolateEPKci_ZNK2v85Value8ToObjectEv_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN2v88TryCatchC1Ev_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZNK2v88TryCatch9HasCaughtEv_ZN2v88TryCatchD1Ev_ZN4node14FatalExceptionERN2v88TryCatchE_ZN2v87Isolate10GetCurrentEv_ZN2v86Number3NewEd_ZN12node_sqlite38Database14UpdateCallbackEPS0_PNS0_10UpdateInfoE_Z24sqlite_authorizer_stringi_ZN2v87Integer3NewEiPNS_7IsolateE_ZN12node_sqlite38Database10Work_CloseEP9uv_work_s_ZN12node_sqlite38Database7ProcessEv_ZN4node7commons11getInstanceEv_Z18sqlite_code_stringi_ZNSs6appendEPKcj_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZNK2v85Value10IsFunctionEv_ZN12node_sqlite38Database14Work_AfterOpenEP9uv_work_s_ZN2v84NullEvstrlen_ZN12node_sqlite38Database15Work_AfterCloseEP9uv_work_s_ZN12node_sqlite38Database9Work_WaitEPNS0_5BatonE_ZN12node_sqlite38Database14Work_BeginOpenEPNS0_5BatonE_ZN12node_sqlite38Database10OpenGetterEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN2v84TrueEv_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN2v85FalseEv_ZN12node_sqlite38Database9SerializeERKN2v89ArgumentsE_ZN2v89UndefinedEv_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN12node_sqlite38Database11ParallelizeERKN2v89ArgumentsE_ZN12node_sqlite38Database22RegisterUpdateCallbackEPNS0_5BatonEsqlite3_update_hook_ZN12node_sqlite38Database15RemoveCallbacksEv_ZN12node_sqlite38DatabaseD2Ev_ZTVN12node_sqlite38DatabaseE_ZN12node_sqlite38DatabaseD1Ev_ZN12node_sqlite38Database15Work_BeginCloseEPNS0_5BatonE_ZN12node_sqlite38DatabaseD0Ev_ZNSt11_Deque_baseIPN12node_sqlite38Database4CallESaIS3_EE17_M_initialize_mapEj_ZN12node_sqlite38Database3NewERKN2v89ArgumentsE_ZN6jxcore8JXStringC1Ev_ZN6jxcore8JXString13SetFromHandleEN2v86HandleINS1_5ValueEEEb_ZNK2v85Value7IsInt32Ev_ZNK2v85Value10Int32ValueEv_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN6jxcore8JXStringdeEv_ZN6jxcore8JXStringD1Ev_ZNSt5dequeIPN12node_sqlite38Database4CallESaIS3_EE16_M_push_back_auxERKS3__ZSt17__throw_bad_allocv_ZN12node_sqlite38Database8ScheduleEPFvPNS0_5BatonEES2_b_ZN12node_sqlite38Database5CloseERKN2v89ArgumentsE_ZN12node_sqlite38Database9ConfigureERKN2v89ArgumentsE_ZN12node_sqlite38Database4ExecERKN2v89ArgumentsE_ZN12node_sqlite38Database4WaitERKN2v89ArgumentsE_ZN12node_sqlite38Database13LoadExtensionERKN2v89ArgumentsE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN6jxcore11ThreadStoreIN2v810PersistentINS1_16FunctionTemplateEEEE4mtedE_Znaj_ZN12node_sqlite38Database13jx_persistentEpthread_create !5 " 0KZ +; +; ) #P #P #P (7? (7? (7? 5@ ;JY* .IX` 9Lb\ 4Wz\\ 4Wz\\ 4Wz\\ :MWj\ F[8Uuz F[8Uuz 4Wp\\ 4Wp\\ 4Wp\\ L v  \ 1Gdp }\P:c ;Pl| \ 1Kr  -5J\\T -Zs  \  !)1H ` )4@N[f|\  !)1H `   .Vam{\  !)1O!g" ,=Ow\\4A %Nbn {\ ;%[&qz ' '("# <])i& )*Ik*s+*Bw\ +@ ^v   $,4-**+,?^  +S^q|$& '.'('F"V m)& )*!-\Xm   4?Rgq  $,4-**+,?^   1Ydw$& '.' (/N"^ u)&  )*)5\`u  <GZoy  !)1m*u+-** .9$L_&u~ '.'("( >b)m& )** +,*:Lt\  : Pk  '/U*]+-** &$6oy  !)1e*+-* ,7$J_&u~ '.'("( >b)m& )*+ /I _z\Cz ,+ ;  '/[3l4*56  '/J8`*l5y3+4+R*c$8/8@ ^p9:58  '/J8`*l5y3+4+R*c$8/8@ ^p9:58 F=[8U uz= 2_Dms @(>3iz ">'-/>#G @(>3iz  ;k  '/7W u9:56F^GHI@^DDJ (? Z{)" )K"8LJUs15L8* 9,:A5W888+O8o888 ;MN 3%& ' ''EW(i" )& (L)_*x*+  $3[i|\*&M7A  '/J8`*l5y3+"-Ie{J B4OE cu9:888  !)1R8h*w53F GK( 0KKVrO$5L# AS9e:z5O8 %KUHitIO8 6H9Z:}K '(:5\@W8  '/M8c*o5|3 9":45FG+)K8C_{JO5L?8R p9:8888  '/J8`*l5y3+"-Ie{J 04OE cu9:888  '/M8c*o5|3 9":45FG+)K8C_{JO5L?8R p9:8888  U( V2W:X@YOZU[|      A C Lp  Dt @t "$&H(*,.(0X2468H:<>@8ClEGIK4MhOQSU8W\Y[]_ aL cx e g i l( nh p r t v8 xh z |  4  @  L `  l  x                D $ M 0Y 8 @ H P X `@ hp!p'p,ppB @ - @!HfD @00$gV`F @`0'DF@ @0*= @-=f@ b @00    @03^  @806^KZ @h(9 K @(<MkpK @(?(L$ @(BK  @`E l @h8Hl Gp C @8Kr   @PN    @(PQH     @xPT     @@W*  ~   z @Z    @]\ f p @X` l p @pXc2 lx pt @Xf l p @ Hi, \r `tn @hl    @Xo&o,k @Hr  @Xu:23I00 @Py  @|g!"k @l$Jp$F @H&%0%% @V*0`*, @m// @5@5+< @}:: @hF<MP< I @\A`AF @0AA @`B+B' @XhEE @0HHH D @FJ`J  @pL5 L 1 @XZLLS @X8DM`M  @`<4N@N  @ 2OYZOH`O D @&W0W @H02Y|@Y[x @8h]] @:``q @"f0f @8>6j@j @Hm Pm @8LVqz`qv @P0r @04r8r @8 /Pr+ @Xd`r` @hpr @xr @ r @ D rt r r r 0r( r r  @~  Xstatement.o/ 1560953087 501 20 100644 119676 ` ELF4(YV+,./12UVLMabdejkmoprtuwyz|~<=?ACEGIKMQUWVSd$ԋt$D|$<$t4$P<$d$,[^_]USd$D$ @@$d$[]UVSd$t$ @Ft6$l$D$D$F$Ft$d$[^]UVSd$t$ F4@t$$T$ T$d$[^]UVSd$t$ F4@F0@ @t$$T$ T$d$[^]UVSd$t$ F4@F0@ @t$$T$ T$d$[^]UVSd$t$ F4@F0@ @t$$T$ T$d$[^]UVSd$t$ F4@F0@ @t$$T$ T$d$[^]UVSd$t$ F4@F0@ @t$$T$ T$d$[^]UVSd$D$ p4F$Fd$[^]UVSd$tH~d$[^]ÍHqɉpT$l$$d$[^]UVSd$t$ nu(l$t$D$F$F$d$[^]UWVSd$|$0$XƋG4F8F<F4FDF@FHFLFPFTvD$$F4$Rt$$T$G8wL~$tp$FPGHwLtj$t\$FTG0@G0@ @|$$T$ T$d$[^_]1FPGHwLu1UVSd$D$ pt]F4l$$R FPt$FPFTt$FTFD$F8t$4$d$[^]UVSd$t$ @Ft2$D$D$F$Ft$4$d$[^]USd$܅ҋx;P}@)Љ$]Ðt&E$E$]USd$܅ҋx;P}@)Љ$]Ðt&E$E$]USd$܅ҋx;P}@)Љ$]Ðt&E$E$]UVSd$t$0@F4$R F8t$F8F@P;ud$ [^]Ít&Hډ$D$D$ȍHqpUWVSd$ԋt$@@F4$R F8t$F8F@P;u4$d$,[^_]Ít&t&HӉ$D$D$HyxUWVSd$D$`0F4~D@ $$D$,FHOD$L$ HD$L$F4@ $GT$,u$l$Xd$L[^_]Ðt&F4t$<@ $D$L$:4$L$t$G$D$w?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$PP4l$HD$ $Q D$P8t$D$D$@8@w?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$PP4l$HD$ $Q D$P8t$D$D$@8@w?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$PP4l$HD$ $Q D$P8t$D$D$@8@w?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$Pl$HP4 $Q D$PP8t$D$P@8D$PPw?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$PP4l$HD$ $Q D$P8t$D$D$@8@w?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$PP4l$HD$ $Q D$P8t$D$D$@8@w?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$Pl$HP4 $Q D$PP8t$D$P@8D$PPw?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$Pl$HP4 $Q D$PP8t$D$P@8D$PPw?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$PP4l$HD$ $Q D$P8t$D$D$@8Pw?␍t&l$HFHL$;4$D$PH<@@ƒ)9rD$PP4l$HD$ $Q D$P8t$D$D$@8PwJ.,卶D$l$XGT$,$T$,Gu9T$(^2uGtG l$Xt$<@ $D$T$:4$T$t$O $D$MԉMĉE9&'71f>wB⍴&E8P(tEĉ$Uԃ1t $EЋED$ VD$EĉT$$EЃD$ D$EԉD$E$f>wAF $t&FHM;4$9}Ee[^_]fFD$Eĉ$Eԃ3&n\$ڍ&D$FD$F $@D$Eĉ$&FPD$ET$ D$Eĉ$vFPU9uUFPU9!t*HED$EЉ$HQPՐt&t:PЅMED$EЉ$MtEPUPEUWEVS$t$E<$$EExGDEEEt&u4$OE$.&EUU(&EvEt&EMM(&EUWVSd$E@4EE}uȋG$D$Mԉ4$L$M4$D$D$}<$D$|$4$uED$ 4$D$ED$Eă4$D$Eă4$D$EM}ĉD$A4$D$EăD$ 4$EET$D$ED$ <$D$EĉD$MA$D$ED$ 4$D$EăD$ 4$EET$D$ED$ <$D$EĉD$Et $EE@8$NjE@8<$EE̋E$UB4$D$ẺD$ED$ |$4$D$E$E$EȍP;e[^_]Í&}D$ 4$D$|$Eă|$D$ E̋E4$EЍD$E}ċ@4$D$Eă|$4$D$U}ĉ$E@4$D$ẺD$ED$ |$4$D$U$E$t6HE$D$EwvHqpUWEVSd$$E4$$SE0~4GdvB4$G Gh<$G $4$PE$e[^_]ÐF8tT$EEFH $UD$UD$EMD$ T$$UMEWEET$$EMD$ D$EL$$UT$FPUD$E$UD$EMD$ T$$UMEWEET$$EMD$ D$EL$$U:B(tE$E$EN81t $EEԉ$EOUL$$MEUL$MD$D$ $L$E$u%E$t&Elt&E$΍vUWVSd$E@4EE}uȋG$D$Mԉ4$L$M4$D$D$}<$D$|$4$uED$ 4$D$ED$Eă4$D$Eă4$D$EM}ĉD$A4$D$EăD$ 4$EET$D$ED$ <$D$EĉD$MA$D$ED$ 4$D$EăD$ 4$EET$D$ED$ <$D$EĉD$Et $EE@8$NjE@8<$EE̋E$UB4$D$ẺD$ED$ |$4$D$E$E$EȍP;e[^_]Í&}D$ 4$D$|$Eă|$D$ E̋E4$EЍD$E}ċ@4$D$Eă|$4$D$U}ĉ$E@4$D$ẺD$ED$ |$4$D$U$E$t6HE$D$EwvHqpUWEVS$t$E<$$EE8w4~etA<$F Fh4$F $<$PE$e[^_]ËG8t$W8Et$tGL+GHE8VE$EEb$EED$D$E$EMԉ $EMFD$E$ED$EUD$ D$ET$$M $E$D$UE$UD$EEGH‹GL9}҉ωuE1D$E$EMt$EEL$$ED$ D$ED$E$tt$EE$;uu}uE8E$E$EEEEԉ$EFUD$$EMUD$EL$D$ $D$E$hE$XEMM(&EvEt&E(0t&E4UWVSd$E@4EE}uȋG$D$Mԉ4$L$M4$D$D$}<$D$|$4$uED$ 4$D$ED$Eă4$D$Eă4$D$EM}ĉD$A4$D$EăD$ 4$EET$D$ED$ <$D$EĉD$MA$D$ED$ 4$D$EăD$ 4$EET$D$ED$ <$D$EĉD$Et $EE@8$NjE@8<$EE̋E$UB4$D$ẺD$ED$ |$4$D$E$E$EȍP;e[^_]Í&}D$ 4$D$|$Eă|$D$ E̋E4$EЍD$E}ċ@4$D$Eă|$4$D$U}ĉ$E@4$D$ẺD$ED$ |$4$D$U$E$t6HE$D$EwvHqpUWVSd$čD$ $D$D$P8w4~et<$V Fj4$V $<$RD$$d$<[^_]UWVSd$ċu ƒ`4$t$uD$4$E4$E$ EMffHR MЉPUۋEȉT$ WL$D$$4$e[^_]Í&4$u|4$4$ƒ$4$\4$1td4$$]f}fxv4$$}pfR fxp Pe[^_]Ë@@v4$$}f@ fxR pP$]fMfHR PEXe[^_]Ðt&Pz@ $MffHR Pvt$}ԉ<$uԃ<$t$Eԃ$t$<$EEԃ$$MfUfH@ BEȉB$UЃ}ljB rM1EtfEtXUWVSd$ԋt$@|$Dl$HN;NtQtANQV)uu7d$,[^_]Ðt&)ʍl$8L$B|$$Րt&) 9D$)ыD$l$l$8L$$l$‹L$tE)l N)uH| t$l$8T$T$T$~V3D$)s&L$,$l$l$8|$T$L$T$L$l$fL$l$8$D$L$T$L$T$O=?L$)1҅UWVSd$ԋt$@|$Dl$HN;NtQtANQV)uu7d$,[^_]Ðt&)ʍl$8L$B|$$Րt&) 9D$)ыD$l$l$8L$$l$‹L$tE)l N)uH| t$l$8T$T$T$~V3D$)s&L$,$l$l$8|$T$L$T$L$l$fL$l$8$D$L$T$L$T$O=?L$)1҅UWVSd$u M5E9E~EpE9pE1Up9uMp)$HUA8A<A@@EADMA4$PMI1t<$}M9}A8\E9xEEUVSd$t$0~uZ~t ~$L$4L$8HN@V8D$9tV8V8d$ [^]Ðt&$L$4L$8HN@V8D$9tVtV8V84$d$ [^]Í&D$8$T$4d$ [^]Ðt&D$ D$4$sD$D$F $UWVuSd$ĉ4$} 4$$x M̋OtMEԉ$Uԃ1t $4$D$}4$Ee[^_]GPEЋBxED$Mȃ$MȉEЅGGƒOG$DWO$HMMЉ‹B8J4B<@B@BDỦ $PỦRMȋU̅ $U&R U&BExBɉE $HMЉ‹B8J4B<@B@BDỦ $PỦRU1B8T$D$EЉ$G}ԉD$ED$ <$D$Eԃ<$D$Eԃ<$D$EԃEԉ$MԃafEԉ$Eԃ fEԉ$EԃfPz@ 1UWVuSd$ĉ4$4$$M x:Q}tMEԉ$Uԃ1t $D$4$M4$Ee[^_]E @Hy:D$$UỦDž?E @E MԉM̋@ƒE HE @$OE PE H$HM‹z4B8B<@B@BDUЉ<$PUЉRMȋUЅ $UЉB8T$<$D$G @D$Ẻ$Eԃ4$D$}I A1xyEԉE$H‹z4B8B<@B@BDUЉ<$PUЉRU1/}̍D$ED$ <$D$Eԃ<$D$Eԃ<$D$Eԃ&Ẻ$MԃUfEԉ$EEԃ&Ẻ$EԃfPz@ 1^UWVuSd$U 4$U4$$UǀUЉEBEtGEĉ$Uă1t $D$4$M4$Ee[^_]BPJytiD$$‰$ED$D$ |$D$UUtGD$$D$EЋ@evB tH1ҀyuP듍&}ĉD$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$}UWVuSd$U 4$U4$$UǀUЉEBEtGEĉ$Uă1t $D$4$M4$Ee[^_]BPJytiD$$‰$ED$D$ |$D$UUtGD$$D$EЋ@evB tH1ҀyuP듍&}ĉD$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$}UWVuSd$U 4$U4$$UǀUЉEBEtGEĉ$Uă1t $D$4$M4$Ee[^_]BPJytiD$$‰$ED$D$ |$D$UUtGD$$D$EЋ@evB tH1ҀyuP듍&}ĉD$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$}UWVuSd$U 4$U4$$UǀUЉEBEtGEĉ$Uă1t $D$4$M4$Ee[^_]BPJytiD$$‰$ED$D$ |$D$UUtGD$$D$EЋ@evB tH1ҀyuP듍&}ĉD$ED$ <$D$Eă<$D$Eă<$D$Eă4$D$}UWVuSd$4$} 4$$Ey}ЉEGEtJEĉ$Uă1t $D$4$U4$Ee[^_]vWJyD$$}ԉEO9|$ED$ D$ED$E$Q1BHT$D$E$EЋ@4$D$M AAA A  AAA A < AB Cn AAA A  AAA A < AB Cn AAA A $ AAA A <$ AB Cn AAA A  AAA A <d AB C^ AAA A  AAA F , UAB C AAA F < $AA AAOPV AA AAC ,AB C! AAA F ,DAB Cy AAA F (tAG CAAA ,AB AE AAA I <AA AAO@] AA AAD @ AB Bk AA F F AA H P AA F ,TAB BD{ AAA I ,7AB BD{ AAA I ,AB BD AAA C ,AB BD AAA C ,AB BD AAA C ,DAB BD AAA C ,tAB BD AAA F $AB BAA .symtab.strtab.shstrtab.text.data.bss.text.unlikely._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.rel.text._ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv.text.unlikely._ZN4node10ObjectWrap3RefEv.rel.text._ZN4node10ObjectWrap3RefEv.text.unlikely._ZN4node10ObjectWrapD2Ev.rel.text._ZN4node10ObjectWrapD2Ev.text.unlikely._ZN12node_sqlite39Statement17Work_BeginPrepareEPNS_8Database5BatonE.rel.text._ZN12node_sqlite39Statement17Work_BeginPrepareEPNS_8Database5BatonE.text.unlikely._ZN12node_sqlite39Statement14Work_BeginBindEPNS0_5BatonE.rel.text._ZN12node_sqlite39Statement14Work_BeginBindEPNS0_5BatonE.text.unlikely._ZN12node_sqlite39Statement13Work_BeginGetEPNS0_5BatonE.rel.text._ZN12node_sqlite39Statement13Work_BeginGetEPNS0_5BatonE.text.unlikely._ZN12node_sqlite39Statement13Work_BeginRunEPNS0_5BatonE.rel.text._ZN12node_sqlite39Statement13Work_BeginRunEPNS0_5BatonE.text.unlikely._ZN12node_sqlite39Statement13Work_BeginAllEPNS0_5BatonE.rel.text._ZN12node_sqlite39Statement13Work_BeginAllEPNS0_5BatonE.text.unlikely._ZN12node_sqlite39Statement15Work_BeginResetEPNS0_5BatonE.rel.text._ZN12node_sqlite39Statement15Work_BeginResetEPNS0_5BatonE.text.unlikely._ZN12node_sqlite39Statement10Work_ResetEP9uv_work_s.rel.text._ZN12node_sqlite39Statement10Work_ResetEP9uv_work_s.text.unlikely._ZNSs4_Rep10_M_disposeERKSaIcE.part.0.rel.text._ZNSs4_Rep10_M_disposeERKSaIcE.part.0.text.unlikely._ZN4node10ObjectWrap5UnrefEv.rel.text._ZN4node10ObjectWrap5UnrefEv.text.unlikely._ZN12node_sqlite39Statement14Work_BeginEachEPNS0_5BatonE.rel.text._ZN12node_sqlite39Statement14Work_BeginEachEPNS0_5BatonE.text.unlikely._ZN12node_sqlite39Statement13CloseCallbackEP11uv_handle_s.rel.text._ZN12node_sqlite39Statement13CloseCallbackEP11uv_handle_s.text.unlikely._ZN4node10ObjectWrapD0Ev.rel.text._ZN4node10ObjectWrapD0Ev.text.unlikely._ZNK6jxcore10PArguments8IsObjectEj.part.24.rel.text._ZNK6jxcore10PArguments8IsObjectEj.part.24.text.unlikely._ZNK6jxcore10PArguments10IsFunctionEj.part.20.rel.text._ZNK6jxcore10PArguments10IsFunctionEj.part.20.text.unlikely._ZNK6jxcore10PArguments8IsRegExpEj.part.22.rel.text._ZNK6jxcore10PArguments8IsRegExpEj.part.22.text.unlikely._ZN12node_sqlite38Database5BatonD2Ev.rel.text._ZN12node_sqlite38Database5BatonD2Ev.text.unlikely._ZN12node_sqlite38Database5BatonD0Ev.rel.text._ZN12node_sqlite38Database5BatonD0Ev.text.unlikely._ZN12node_sqlite39Statement12Work_PrepareEP9uv_work_s.rel.text._ZN12node_sqlite39Statement12Work_PrepareEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement5BatonD2Ev.rel.text._ZN12node_sqlite39Statement5BatonD2Ev.rel.rodata._ZN12node_sqlite39Statement5BatonD2Ev.text.unlikely._ZN12node_sqlite39Statement8RunBatonD2Ev.rel.text._ZN12node_sqlite39Statement8RunBatonD2Ev.rel.rodata._ZN12node_sqlite39Statement8RunBatonD2Ev.text.unlikely._ZN12node_sqlite39Statement9EachBatonD2Ev.rel.text._ZN12node_sqlite39Statement9EachBatonD2Ev.rel.rodata._ZN12node_sqlite39Statement9EachBatonD2Ev.text.unlikely._ZN12node_sqlite39Statement9EachBatonD0Ev.rel.text._ZN12node_sqlite39Statement9EachBatonD0Ev.rel.rodata._ZN12node_sqlite39Statement9EachBatonD0Ev.text.unlikely._ZN12node_sqlite39Statement9RowsBatonD2Ev.rel.text._ZN12node_sqlite39Statement9RowsBatonD2Ev.rel.rodata._ZN12node_sqlite39Statement9RowsBatonD2Ev.text.unlikely._ZN12node_sqlite39Statement8RowBatonD2Ev.rel.text._ZN12node_sqlite39Statement8RowBatonD2Ev.rel.rodata._ZN12node_sqlite39Statement8RowBatonD2Ev.text.unlikely._ZN12node_sqlite39Statement5BatonD0Ev.rel.text._ZN12node_sqlite39Statement5BatonD0Ev.rel.rodata._ZN12node_sqlite39Statement5BatonD0Ev.text.unlikely._ZN12node_sqlite39Statement8RunBatonD0Ev.rel.text._ZN12node_sqlite39Statement8RunBatonD0Ev.rel.rodata._ZN12node_sqlite39Statement8RunBatonD0Ev.text.unlikely._ZN12node_sqlite39Statement8RowBatonD0Ev.rel.text._ZN12node_sqlite39Statement8RowBatonD0Ev.rel.rodata._ZN12node_sqlite39Statement8RowBatonD0Ev.text.unlikely._ZN12node_sqlite39Statement9RowsBatonD0Ev.rel.text._ZN12node_sqlite39Statement9RowsBatonD0Ev.rel.rodata._ZN12node_sqlite39Statement9RowsBatonD0Ev.text.unlikely._ZN12node_sqlite39Statement4BindERKSt6vectorIPNS_6Values5FieldESaIS4_EE.rel.text._ZN12node_sqlite39Statement4BindERKSt6vectorIPNS_6Values5FieldESaIS4_EE.rel.rodata._ZN12node_sqlite39Statement4BindERKSt6vectorIPNS_6Values5FieldESaIS4_EE.text.unlikely._ZN12node_sqlite39Statement9Work_BindEP9uv_work_s.rel.text._ZN12node_sqlite39Statement9Work_BindEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement8Work_RunEP9uv_work_s.rel.text._ZN12node_sqlite39Statement8Work_RunEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement7RowToJSEPSt6vectorIPNS_6Values5FieldESaIS4_EE.rel.text._ZN12node_sqlite39Statement7RowToJSEPSt6vectorIPNS_6Values5FieldESaIS4_EE.rel.rodata._ZN12node_sqlite39Statement7RowToJSEPSt6vectorIPNS_6Values5FieldESaIS4_EE.text.unlikely._ZN12node_sqlite39Statement9AsyncEachEP10uv_async_si.rel.text._ZN12node_sqlite39Statement9AsyncEachEP10uv_async_si.rodata.str1.1.rodata.str1.4.text.unlikely._ZN12node_sqlite39Statement10CleanQueueEv.rel.text._ZN12node_sqlite39Statement10CleanQueueEv.text.unlikely._ZN12node_sqlite39Statement7ProcessEv.rel.text._ZN12node_sqlite39Statement7ProcessEv.text.unlikely._ZN12node_sqlite39Statement15Work_AfterResetEP9uv_work_s.rel.text._ZN12node_sqlite39Statement15Work_AfterResetEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement8FinalizeEv.rel.text._ZN12node_sqlite39Statement8FinalizeEv.text.unlikely._ZN12node_sqlite39Statement12PrepareBatonD2Ev.rel.text._ZN12node_sqlite39Statement12PrepareBatonD2Ev.text.unlikely._ZN12node_sqlite39Statement8FinalizeEPNS0_5BatonE.rel.text._ZN12node_sqlite39Statement8FinalizeEPNS0_5BatonE.text.unlikely._ZN12node_sqlite39StatementD2Ev.rel.text._ZN12node_sqlite39StatementD2Ev.text.unlikely._ZN12node_sqlite39Statement12PrepareBatonD0Ev.rel.text._ZN12node_sqlite39Statement12PrepareBatonD0Ev.text.unlikely._ZN12node_sqlite39StatementD0Ev.rel.text._ZN12node_sqlite39StatementD0Ev.text.unlikely._ZN12node_sqlite39Statement5ErrorINS0_12PrepareBatonEEEvPT_.rel.text._ZN12node_sqlite39Statement5ErrorINS0_12PrepareBatonEEEvPT_.text.unlikely._ZN12node_sqlite39Statement17Work_AfterPrepareEP9uv_work_s.rel.text._ZN12node_sqlite39Statement17Work_AfterPrepareEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement5ErrorINS0_5BatonEEEvPT_.rel.text._ZN12node_sqlite39Statement5ErrorINS0_5BatonEEEvPT_.text.unlikely._ZN12node_sqlite39Statement14Work_AfterBindEP9uv_work_s.rel.text._ZN12node_sqlite39Statement14Work_AfterBindEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement5ErrorINS0_8RowBatonEEEvPT_.rel.text._ZN12node_sqlite39Statement5ErrorINS0_8RowBatonEEEvPT_.text.unlikely._ZN12node_sqlite39Statement13Work_AfterGetEP9uv_work_s.rel.text._ZN12node_sqlite39Statement13Work_AfterGetEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement5ErrorINS0_8RunBatonEEEvPT_.rel.text._ZN12node_sqlite39Statement5ErrorINS0_8RunBatonEEEvPT_.text.unlikely._ZN12node_sqlite39Statement13Work_AfterRunEP9uv_work_s.rel.text._ZN12node_sqlite39Statement13Work_AfterRunEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement5ErrorINS0_9RowsBatonEEEvPT_.rel.text._ZN12node_sqlite39Statement5ErrorINS0_9RowsBatonEEEvPT_.text.unlikely._ZN12node_sqlite39Statement13Work_AfterAllEP9uv_work_s.rel.text._ZN12node_sqlite39Statement13Work_AfterAllEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement5ErrorINS0_9EachBatonEEEvPT_.rel.text._ZN12node_sqlite39Statement5ErrorINS0_9EachBatonEEEvPT_.text.unlikely._ZN12node_sqlite39Statement14Work_AfterEachEP9uv_work_s.rel.text._ZN12node_sqlite39Statement14Work_AfterEachEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement13BindParameterIiEEPNS_6Values5FieldEN2v86HandleINS5_5ValueEEET_.rel.text._ZN12node_sqlite39Statement13BindParameterIiEEPNS_6Values5FieldEN2v86HandleINS5_5ValueEEET_.text.unlikely._ZNSt6vectorIPS_IPN12node_sqlite36Values5FieldESaIS3_EESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_.rel.text._ZNSt6vectorIPS_IPN12node_sqlite36Values5FieldESaIS3_EESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_.text.unlikely._ZNSt6vectorIPN12node_sqlite36Values5FieldESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_.rel.text._ZNSt6vectorIPN12node_sqlite36Values5FieldESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_.text.unlikely._ZN12node_sqlite39Statement4BindINS0_5BatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.rel.text._ZN12node_sqlite39Statement4BindINS0_5BatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.text.unlikely._ZN12node_sqlite39Statement4BindINS0_8RowBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.rel.text._ZN12node_sqlite39Statement4BindINS0_8RowBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.text.unlikely._ZN12node_sqlite39Statement4BindINS0_8RunBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.rel.text._ZN12node_sqlite39Statement4BindINS0_8RunBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.text.unlikely._ZN12node_sqlite39Statement4BindINS0_9RowsBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.rel.text._ZN12node_sqlite39Statement4BindINS0_9RowsBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.text.unlikely._ZN12node_sqlite39Statement4BindINS0_9EachBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.rel.text._ZN12node_sqlite39Statement4BindINS0_9EachBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii.text.unlikely._ZN12node_sqlite39Statement6GetRowEPSt6vectorIPNS_6Values5FieldESaIS4_EEP12sqlite3_stmt.rel.text._ZN12node_sqlite39Statement6GetRowEPSt6vectorIPNS_6Values5FieldESaIS4_EEP12sqlite3_stmt.rel.rodata._ZN12node_sqlite39Statement6GetRowEPSt6vectorIPNS_6Values5FieldESaIS4_EEP12sqlite3_stmt.text.unlikely._ZN12node_sqlite39Statement8Work_GetEP9uv_work_s.rel.text._ZN12node_sqlite39Statement8Work_GetEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement8Work_AllEP9uv_work_s.rel.text._ZN12node_sqlite39Statement8Work_AllEP9uv_work_s.text.unlikely._ZN12node_sqlite39Statement9Work_EachEP9uv_work_s.rel.text._ZN12node_sqlite39Statement9Work_EachEP9uv_work_s.text.unlikely._ZNSt11_Deque_baseIPN12node_sqlite39Statement4CallESaIS3_EE17_M_initialize_mapEj.rel.text._ZNSt11_Deque_baseIPN12node_sqlite39Statement4CallESaIS3_EE17_M_initialize_mapEj.text.unlikely._ZN12node_sqlite39Statement3NewERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement3NewERKN2v89ArgumentsE.text.unlikely._ZNSt5dequeIPN12node_sqlite39Statement4CallESaIS3_EE16_M_push_back_auxERKS3_.rel.text._ZNSt5dequeIPN12node_sqlite39Statement4CallESaIS3_EE16_M_push_back_auxERKS3_.text.unlikely._ZN12node_sqlite39Statement8ScheduleEPFvPNS0_5BatonEES2_.rel.text._ZN12node_sqlite39Statement8ScheduleEPFvPNS0_5BatonEES2_.text.unlikely._ZN12node_sqlite39Statement5ResetERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement5ResetERKN2v89ArgumentsE.text.unlikely._ZN12node_sqlite39Statement8FinalizeERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement8FinalizeERKN2v89ArgumentsE.text.unlikely._ZN12node_sqlite39Statement4BindERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement4BindERKN2v89ArgumentsE.text.unlikely._ZN12node_sqlite39Statement3GetERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement3GetERKN2v89ArgumentsE.text.unlikely._ZN12node_sqlite39Statement3RunERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement3RunERKN2v89ArgumentsE.text.unlikely._ZN12node_sqlite39Statement3AllERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement3AllERKN2v89ArgumentsE.text.unlikely._ZN12node_sqlite39Statement4EachERKN2v89ArgumentsE.rel.text._ZN12node_sqlite39Statement4EachERKN2v89ArgumentsE.text.unlikely._GLOBAL__sub_I_statement.cc.rel.text.startup._GLOBAL__sub_I_statement.cc.rel.init_array.bss._ZN6jxcore11ThreadStoreIN2v810PersistentINS1_16FunctionTemplateEEEE4mtedE.rel.data.rel.ro._ZTVN4node10ObjectWrapE.rel.data.rel.ro._ZTVN12node_sqlite38Database5BatonE.rel.data.rel.ro._ZTVN12node_sqlite39Statement5BatonE.rel.data.rel.ro._ZTVN12node_sqlite39Statement8RowBatonE.rel.data.rel.ro._ZTVN12node_sqlite39Statement8RunBatonE.rel.data.rel.ro._ZTVN12node_sqlite39Statement9RowsBatonE.rel.data.rel.ro._ZTVN12node_sqlite39Statement9EachBatonE.rel.data.rel.ro._ZTVN12node_sqlite39Statement12PrepareBatonE.rel.data.rel.ro._ZTVN12node_sqlite39StatementE.bss._ZN12node_sqlite39Statement13jx_persistentE.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group()*+,./124578:;=>@ACDFGIJ]JLMOPRSUVXY4VY[\_V\^_V_abdeghjkmoprtuwyz|~    "#%&()+,./1245788P:<=?ACEGIKMOPQSkpuz %+=1 T8`k>kDPkJ`pPpVPp\`ubuhPun`ztzzPzpp`P`P  p0 X"( .4:@FLR X^djp q x  x  '@eSiDn    R      !"#$%&'B",SQi-"/f"2!=&Sf"2O5+#haoY8^Y;J$Y>! RYAYD, ze 7G   L"M 2 d ;P    F  N  w  S' = D l"V] v    "b !? ) "bN "es        "k!A>C"ki"p"p"u"u"z9"c!G""!C"0"V"""q1CUg{*J^l'Jt"Kmv$JoI3"!K3"0b("!M(";"4""KR"""",L"("*>Vn (F">F"} "*AU "4"!E ""x!IU "6Lau"/ c    /!`!!"!!  8"#l"7&")",#/:#2l#5#####!<3$9$Oe$ statement.cc_ZNSs4_Rep10_M_disposeERKSaIcE.part.0_ZNK6jxcore10PArguments8IsObjectEj.part.24_ZNK6jxcore10PArguments10IsFunctionEj.part.20_ZNK6jxcore10PArguments8IsRegExpEj.part.22_GLOBAL__sub_I_statement.cc_ZStL8__ioinit.L135.L205.L275.L345.L417.L491.L564.L635.L707.L781.L858.L897.L909.L2617.L141.L139.L140.L211.L209.L210.L281.L279.L280.L351.L349.L350.L423.L421.L422.L497.L495.L496.L570.L568.L569.L641.L639.L640.L713.L711.L712.L787.L785.L786.L859.L861.L862.L863.L864.L898.L900.L901.L902.L903.L915.L913.L914.LC36.LC37.LC38.LC39.LC40.LC41.LC58.LC59.L2618.L2620.L2621.L2622.L2623.LC78.LC79.LC80.LC82.LC81.LC86.LC89_ZN4node10ObjectWrapD5Ev_ZN12node_sqlite38Database5BatonD5Ev_ZN12node_sqlite39Statement5BatonD5Ev_ZN12node_sqlite39Statement8RunBatonD5Ev_ZN12node_sqlite39Statement9EachBatonD5Ev_ZN12node_sqlite39Statement9RowsBatonD5Ev_ZN12node_sqlite39Statement8RowBatonD5Ev_ZN12node_sqlite39Statement12PrepareBatonD5Ev_ZN12node_sqlite39StatementD5Ev_ZN4node10ObjectWrap12WeakCallbackEN2v810PersistentINS1_5ValueEEEPv__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScopeD1Ev_ZN4node10ObjectWrap3RefEv_ZN2v82V89ClearWeakEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD2Ev_ZTVN4node10ObjectWrapE_ZN2v86Object25SetPointerInInternalFieldEiPv_ZN2v82V813DisposeGlobalEPPNS_8internal6ObjectE_ZN4node10ObjectWrapD1Ev_ZN12node_sqlite39Statement17Work_BeginPrepareEPNS_8Database5BatonEuv_default_loop_ZN12node_sqlite39Statement17Work_AfterPrepareEP9uv_work_s_ZN12node_sqlite39Statement12Work_PrepareEP9uv_work_suv_queue_work_ZN12node_sqlite39Statement14Work_BeginBindEPNS0_5BatonE_ZN12node_sqlite39Statement14Work_AfterBindEP9uv_work_s_ZN12node_sqlite39Statement9Work_BindEP9uv_work_s_ZN12node_sqlite39Statement13Work_BeginGetEPNS0_5BatonE_ZN12node_sqlite39Statement13Work_AfterGetEP9uv_work_s_ZN12node_sqlite39Statement8Work_GetEP9uv_work_s_ZN12node_sqlite39Statement13Work_BeginRunEPNS0_5BatonE_ZN12node_sqlite39Statement13Work_AfterRunEP9uv_work_s_ZN12node_sqlite39Statement8Work_RunEP9uv_work_s_ZN12node_sqlite39Statement13Work_BeginAllEPNS0_5BatonE_ZN12node_sqlite39Statement13Work_AfterAllEP9uv_work_s_ZN12node_sqlite39Statement8Work_AllEP9uv_work_s_ZN12node_sqlite39Statement15Work_BeginResetEPNS0_5BatonE_ZN12node_sqlite39Statement15Work_AfterResetEP9uv_work_s_ZN12node_sqlite39Statement10Work_ResetEP9uv_work_ssqlite3_reset_ZNSs4_Rep10_M_destroyERKSaIcE_ZN4node10ObjectWrap5UnrefEv_ZN2v82V88MakeWeakEPPNS_8internal6ObjectEPvPFvNS_10PersistentINS_5ValueEEES5_E_ZN2v82V815MarkIndependentEPPNS_8internal6ObjectE_ZN12node_sqlite39Statement14Work_BeginEachEPNS0_5BatonE_ZN2v87Isolate10GetCurrentEv_Znwjpthread_mutex_init_ZN12node_sqlite39Statement9AsyncEachEP10uv_async_siuv_async_init_ZN2v811HandleScope12CreateHandleEPNS_8internal6ObjectE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN12node_sqlite39Statement14Work_AfterEachEP9uv_work_s_ZN12node_sqlite39Statement9Work_EachEP9uv_work_s_ZN12node_sqlite39Statement13CloseCallbackEP11uv_handle_spthread_mutex_destroy_ZdlPv_ZN4node10ObjectWrapD0Ev_ZNK2v85Value8IsObjectEv_ZN2v89UndefinedEv_ZNK2v85Value10IsFunctionEv_ZNK2v85Value8IsRegExpEv_ZN12node_sqlite38Database5BatonD2Ev_ZTVN12node_sqlite38Database5BatonE_ZNSs4_Rep20_S_empty_rep_storageE_ZN12node_sqlite38Database5BatonD1Ev_ZN12node_sqlite38Database5BatonD0Evsqlite3_db_mutexsqlite3_mutex_entersqlite3_prepare_v2sqlite3_mutex_leavesqlite3_errmsg_ZNSsC1EPKcRKSaIcE_ZNSs6assignERKSs_ZN12node_sqlite39Statement5BatonD2Ev_ZTVN12node_sqlite39Statement5BatonEfree_ZN12node_sqlite39Statement5BatonD1Ev_ZN12node_sqlite39Statement8RunBatonD2Ev_ZN12node_sqlite39Statement8RunBatonD1Ev_ZN12node_sqlite39Statement9EachBatonD2Ev_ZN12node_sqlite39Statement9EachBatonD1Ev_ZN12node_sqlite39Statement9EachBatonD0Ev_ZN12node_sqlite39Statement9RowsBatonD2Ev_ZTVN12node_sqlite39Statement9RowsBatonE_ZN12node_sqlite39Statement9RowsBatonD1Ev_ZN12node_sqlite39Statement8RowBatonD2Ev_ZTVN12node_sqlite39Statement8RowBatonE_ZN12node_sqlite39Statement8RowBatonD1Ev_ZN12node_sqlite39Statement5BatonD0Ev_ZN12node_sqlite39Statement8RunBatonD0Ev_ZN12node_sqlite39Statement8RowBatonD0Ev_ZN12node_sqlite39Statement9RowsBatonD0Ev_ZN12node_sqlite39Statement4BindERKSt6vectorIPNS_6Values5FieldESaIS4_EEsqlite3_clear_bindingssqlite3_bind_nullsqlite3_bind_blobsqlite3_bind_textsqlite3_bind_doublesqlite3_bind_intsqlite3_bind_parameter_indexsqlite3_stepsqlite3_last_insert_rowidsqlite3_changes_ZN12node_sqlite39Statement7RowToJSEPSt6vectorIPNS_6Values5FieldESaIS4_EE_ZN4node7commons11getInstanceEv_ZN2v86Object3NewEv_ZN2v84NullEv_ZN2v86String3NewEPNS_7IsolateEPKci_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v86Number3NewEd_ZN4node6Buffer3NewEPKcjPNS_7commonsE_ZNK2v85Value8ToObjectEv_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEipthread_mutex_lockpthread_mutex_unlock_ZN2v88TryCatchD1Ev_ZN2v88TryCatchC1Ev_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE_ZNK2v88TryCatch9HasCaughtEv_ZN4node14FatalExceptionERN2v88TryCatchE_ZN2v87Integer3NewEiPNS_7IsolateEuv_close_ZN12node_sqlite39Statement10CleanQueueEv_Z18sqlite_code_stringi_ZNSs6appendEPKcj_ZN2v89Exception5ErrorENS_6HandleINS_6StringEEE_ZN2v86Object3GetENS_6HandleINS_5ValueEEE_ZN12node_sqlite39Statement7ProcessEv_ZN12node_sqlite38Database7ProcessEv_ZN12node_sqlite39Statement8FinalizeEvsqlite3_finalize_ZN12node_sqlite39Statement12PrepareBatonD2Ev_ZTVN12node_sqlite39Statement12PrepareBatonE_ZN12node_sqlite39Statement12PrepareBatonD1Ev_ZN12node_sqlite39Statement8FinalizeEPNS0_5BatonE_ZN12node_sqlite39StatementD2Ev_ZTVN12node_sqlite39StatementE_ZN12node_sqlite39StatementD1Ev_ZN12node_sqlite39Statement12PrepareBatonD0Ev_ZN12node_sqlite39StatementD0Ev_ZN12node_sqlite39Statement5ErrorINS0_12PrepareBatonEEEvPT_strlen_ZN12node_sqlite39Statement5ErrorINS0_5BatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_8RowBatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_8RunBatonEEEvPT__ZN12node_sqlite39Statement5ErrorINS0_9RowsBatonEEEvPT__ZN2v85Array3NewEPNS_7IsolateEi_ZN12node_sqlite39Statement5ErrorINS0_9EachBatonEEEvPT__ZN12node_sqlite39Statement13BindParameterIiEEPNS_6Values5FieldEN2v86HandleINS5_5ValueEEET__ZN6jxcore8JXStringC1EN2v86HandleINS1_5ValueEEEPv_ZN6jxcore8JXStringdeEv_ZNSsC1EPKcjRKSaIcE_ZN6jxcore8JXStringD1Ev_ZNK2v85Value7IsInt32Ev_ZNK2v85Value8IsNumberEv_ZNK2v85Value9IsBooleanEv_ZN4node6Buffer11HasInstanceEN2v86HandleINS1_5ValueEEE_ZNK2v85Value6IsDateEv_ZNK2v85Value11NumberValueEv_ZNK2v85Value10Int32ValueEv_ZNK2v85Value12BooleanValueEv_ZN2v86Object43GetIndexedPropertiesExternalArrayDataLengthEv_ZN2v86Object37GetIndexedPropertiesExternalArrayDataEvmalloc_ZNSt6vectorIPS_IPN12node_sqlite36Values5FieldESaIS3_EESaIS6_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS6_S8_EERKS6_memmove_ZNSt6vectorIPN12node_sqlite36Values5FieldESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3__ZN12node_sqlite39Statement4BindINS0_5BatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZNK2v85Value7IsArrayEv_ZNK2v85Array6LengthEv_ZN2v86Object3GetEj_ZN4node6Buffer13jxHasInstanceEN2v86HandleINS1_5ValueEEEPNS_7commonsE_ZN2v86Object16GetPropertyNamesEv_ZNK2v85Value8ToStringEv_ZN12node_sqlite39Statement4BindINS0_8RowBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZN12node_sqlite39Statement4BindINS0_8RunBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZTVN12node_sqlite39Statement8RunBatonE_ZN12node_sqlite39Statement4BindINS0_9RowsBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZN12node_sqlite39Statement4BindINS0_9EachBatonEEEPT_PN4node7commonsERKN6jxcore10PArgumentsEii_ZTVN12node_sqlite39Statement9EachBatonE_ZN12node_sqlite39Statement6GetRowEPSt6vectorIPNS_6Values5FieldESaIS4_EEP12sqlite3_stmtsqlite3_column_countsqlite3_column_typesqlite3_column_namesqlite3_column_doublesqlite3_column_int64sqlite3_column_blobsqlite3_column_bytessqlite3_column_textuv_async_send_ZNSt11_Deque_baseIPN12node_sqlite39Statement4CallESaIS3_EE17_M_initialize_mapEj_ZN12node_sqlite39Statement3NewERKN2v89ArgumentsE_ZN2v89Exception9TypeErrorENS_6HandleINS_6StringEEE_ZN2v814ThrowExceptionENS_6HandleINS_5ValueEEE_ZN2v811HandleScope8RawCloseEPPNS_8internal6ObjectE_ZN12node_sqlite38Database13jx_persistentE_ZN2v816FunctionTemplate11HasInstanceENS_6HandleINS_5ValueEEE_ZN2v86Object31SlowGetPointerFromInternalFieldEi_ZN12node_sqlite38Database8ScheduleEPFvPNS0_5BatonEES2_b_ZNSt5dequeIPN12node_sqlite39Statement4CallESaIS3_EE16_M_push_back_auxERKS3__ZSt17__throw_bad_allocv_ZN12node_sqlite39Statement8ScheduleEPFvPNS0_5BatonEES2__ZN12node_sqlite39Statement5ResetERKN2v89ArgumentsE_ZN12node_sqlite39Statement8FinalizeERKN2v89ArgumentsE_ZN12node_sqlite39Statement4BindERKN2v89ArgumentsE_ZN12node_sqlite39Statement3GetERKN2v89ArgumentsE_ZN12node_sqlite39Statement3RunERKN2v89ArgumentsE_ZN12node_sqlite39Statement3AllERKN2v89ArgumentsE_ZN12node_sqlite39Statement4EachERKN2v89ArgumentsE_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN6jxcore11ThreadStoreIN2v810PersistentINS1_16FunctionTemplateEEEE4mtedE_Znaj_ZN12node_sqlite39Statement13jx_persistentEpthread_createK L!M5NK L"PK LR0PKSZTK L#W)X:YCZK L-W3\D]MZK L-W3_D`MZK L-W3bDcMZK L-W3eDfMZK L-W3hDiMZK L$jK LQkK LJ5m@nK Lp&qrrWstuvuvWwxZK L7TMT_zn{v{K LR.PISXT`{K L*}?~M}K L*?~MK L*?~MK L9TLbkK L:TMW{jkK L(4_v kK LS 5p~{T{Fk[zk     K LS 8p~{T{Fk[zk     K LS ;p~{T{Fk[zk     K LS >p~{T{{Bk[jk     K L5{?s A{T{<fk{k     K L5{?s D{T{<fk{k     K LS Gp~{T{{Bk[jk     K LS Jp~{T{{Bk[jk     K L5{?s M{T{{)Lvkk     K L5{?s P{T{{)Lvkk     K LCjN S Y&5[k     K L/9IQK L(4RbwjK L5p Zu Z+9{j>kZkp        $ ( ,  K L$M,4gu&{1{Nnu|{ {*uG_u~yN3:pK L/Oen   0Q]{ u*{fut{'{V^k{  +DUgpK L-{{ K L!M)1iuu 3NgqpK L +K LCPsTk kK L/JuXppK Li{z{RPSTkK LCPsT{kkK Li{z{RPST{ kK LAW` q >Lg{ uu%JXkw  +P^qkp K L!M)1nuu )<GZNltpK LAW` q >Lg{ uu%JXkw  +P^qkp K L!M)1juu%8CVNlpK LAW` q >Lg{ uu%JXkw  +P^qkp K L!M)1]p{Nuu"M[nu0YpK LAW` q >Lg{ uu%JXkw  +P^qkp K L!M)1ZmxN (DM tuuESbpK LAW` q >Lg{ uu%JXkw  +P^qkp K L$M,4[nyNuu0Bm{-Qi{t{u&IpK LAW` q >Lg{ uu%JXkw  +P^qkpK L!M8KVjNK L,KYhqn /qLZq`qqCqIsqK Lmq{LxK Lmq{LxK Lvqpv*IWfq ~O~.+q1rqq+q1b{q)p?~Mk~~~~-~;}%4Le 3 R ` o q       8 J Z i q   q  +Y     q  ~C qi       q  U ~K LzqpvRqq2~~5N(<KqQqqKqQqIp_~m~~ ~(~6M~[}% /Tl  5 S r   q     , 8 X j z  q   q / +y     q - ~c q       q 0 u ~K LqpvRqq2~~Un 8H\kqqqqkqqq2ip~~~*~H~Vm~{} %)>Otq & v        ) 8 qa         * 9 q_ t       q < J qP |  q  + E e t  q   q  ~Cqiq qDXqa~K LzqpvRqq2~~5N(<KqQqqKqQqIp_~m~~ ~(~6M~[}% /Tl  5 S r   q     , 8 X j z  q   q / +y     q - ~c q       q 0 u ~K LzqpvBao~q"~o~$CQ`q{KqRtqqq!DT`qq2DRqXq Apsqyq  _ ~m  ~ ~ : ~X ~f } ~  }  %9 N _      ' D O e     q   ? L \ h     q  q@_+q8]~q#qL`~K LPbp qq4gqq.Aq+L      K L0<K[K L(4RpqCWjbkK L/Uxq#?O\jvjk K L;qkq K L"M*2X vN} /ASo~upu 5 J~  +7qP{Z1{C{bv|SJmnqpv'XfV Z~w~~( $?~dK L;qqM{ K L6qq   K LM'/J~`ulyN "q-gp}vqp+g>O m~~~ K LM$,J~`ulyN  6q>xpvqXpk ~~~ K L"M*2X~nuzN [2 Pbt K L"M*2X~nuzN ^2 Pbt K L"M*2X~nuzN a2 Pbt K L"M*2X~nuzN d2 Pbt K LM'/U~kuwN o!6(3vG~Z x~K L ( 2:@OUU |Ol        Ol Lp  Dl4d!#%(+D.p024 7`:=@ C`FIL O`RUWYD\x`bdfDhjln$ pT r t v x zL || ~   < l   ( h   ( h   HxXHx04 WJ0@ WO0LW0` Wl0lW0W0W0W0W0W0 W 0 W!04 W0@ W0L W0X W0d W0p W0| W0 W0 W0 W0 W0 W0 W0 W0 W0 W 0W0WR0W0 W0W0W0$W0,W04W0<W0DWKL!L'L,LPB @[ W,- @[W/HfD @\0W2g6@O @4\0W5TYP @d\0W8Y @\0W;JgPYc @\0W>Y @\0WA. {Yw @$]0WDjp7 @T]WG<u]q @l] WJL @](WM\@`;< @]WP @4^8WS "80l4 @l^8WVWV @^(WY V @^(W\;V y` Vu @^(W_   @_8Wb \ E ` A @T_@Wep    # @_`Wh 4 . @  * @_pWk^  Z @d`0Wm $ @ @`pWp   @a0Wr, $i @ e @4apWu   @a0Ww $ @  @axWz@ < @Lb0W|r    @|bW   @b0W $Q @ M @,cW , @c0W D ` @cxW @Td0WL4@  @dxW @d0W(  $ @,eW[W @e0W4@  @eW<  @lf0W/T ` q @fW" @$g0W,"q"^m @Tg0WN#P#  @gxW$Z$`$ } @gW'0 @h`W'@'o@'F k @iW2*2(+U~++ @,jW5Z0n`0j @k(W21@1z @kW%2_2I[ @ll W 333 @l`WD4FP4B @l`W~65@5(  @LmhWh6p6; @mhWL774 { @npW89 @n`W6<< @oW> > @p`WF\B`B @qWD D @r`WVGG @sWJ'J# @t`Wd\N`N @,vWP6Q2 @w`WtTT  @txWdXFpXB @|y`W<\@\w @z8W \|\(x @{W_n_j @,|8Wau aq @d|8W NcZ!`c} V! @|pW!p,"p (" @ xW"~~#~ " @hWe# # # @xW<$$ $ @dhW%~%U z% @̏W %% @0W @&&$& @̐hW&4&@& @4W6'ֳ{'w' @W'Ե( ( @l Wn(( ( @(W(8K)@G) @HW)B)P ) @8W )*^p*`l* @4W#*p*p7* @ W&1+w+s+ @W)+D+P+ @W,-,r,n, @W/,,, @W2'-$m-0i- @4W5-- - @PW8.- @LW:.b.^. @T W=.. @tW?. . @WA.0. @WC//@+/ @WEh/Pd/ @WG/`/ @ĚWI/p/ @ԚWK00 @ WMF0w0000(000 @WT0x!XJ X7t$node_sqlite3.o/ 1560953084 501 20 100644 19280 ` ELFF4("DatabasecloseexecwaitloadExtensionserializeparallelizeconfigureopenStatementbindgetrunalleachresetfinalizeOPEN_READONLYOPEN_READWRITEOPEN_CREATE3.9.1VERSIONSOURCE_IDVERSION_NUMBEROKERRORINTERNALPERMABORTBUSYLOCKEDNOMEMREADONLYINTERRUPTIOERRCORRUPTNOTFOUNDFULLCANTOPENPROTOCOLEMPTYSCHEMATOOBIGCONSTRAINTMISMATCHMISUSENOLFSAUTHFORMATRANGENOTADBSQLITE_OKSQLITE_ERRORSQLITE_INTERNALSQLITE_PERMSQLITE_ABORTSQLITE_BUSYSQLITE_LOCKEDSQLITE_NOMEMSQLITE_READONLYSQLITE_INTERRUPTSQLITE_IOERRSQLITE_CORRUPTSQLITE_NOTFOUNDSQLITE_FULLSQLITE_CANTOPENSQLITE_PROTOCOLSQLITE_EMPTYSQLITE_SCHEMASQLITE_TOOBIGSQLITE_CONSTRAINTSQLITE_MISMATCHSQLITE_MISUSESQLITE_NOLFSSQLITE_AUTHSQLITE_FORMATSQLITE_RANGESQLITE_NOTADBSQLITE_ROWSQLITE_DONEUNKNOWNinsertupdatedelete2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02UWEVSd$$E<$$sE؉$ƉE4$u$ED$ D$4$D$Eă4$D$EEăD$$D$4$L$MEăD$E$UEBXD$ D$4$T$EMăD$4$T$MEUĉ4$D$UUMD$ T$UĉL$$D$ D$4$T$MăD$4$T$MEUĉ4$D$UUMD$ T$UĉL$$D$ D$4$T$MăD$4$T$MEUĉ4$D$UUMD$ T$UĉL$$D$ D$4$T$MăD$4$T$MEUĉ4$D$UUMD$ T$UĉL$$D$ D$4$T$MăD$4$T$MEUĉ4$D$UUMD$ T$UĉL$$D$ D$4$T$MăD$4$T$MEUĉ4$D$UUMD$ T$UĉL$$D$ D$4$T$MăD$4$T$MEUĉ4$D$UUMD$ T$UĉL$$ED$ 4$T$D$Eă4$EED$ED$D$ED$D$T$D$D$ $UM1t $UUE4$D$EăD$4$EED$ED$ D$EĉD$E$E$E$E$$ED$ D$4$D$Eă4$D$EEăD$$D$4$L$MEăD$E$URXM1t $UU4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$4$D$ D$D$Uă4$D$D$UEă4$EED$EUD$ D$EĉT$$E4$D$Eă4$D$EED$ED$ D$EĉD$E$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$ D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$ D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$-Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$ EčT$|$4$D$ EED$ D$EĉD$E$|$4$D$ Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$ Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$ Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$ Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$|$4$D$EčT$|$4$D$ EED$ D$EĉD$E$|$4$D$EčT$|$4$D$ EED$ D$EĉD$E$|$4$D$EčT$|$4$D$ EED$ D$EĉD$E$|$4$D$Eă|$4$D$ T$EED$ D$EĉD$E$E$e[^_]Ðt&t&UU)U\D$et&ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐT$t$t EÍUVSd$4$t$D$$d$[^] $Ë$GCC: (GNU) 4.9.x 20150123 (prerelease)zR| 0AB EC AAA F Pd?$xFAB B~AA .symtab.strtab.shstrtab.text.data.bss.rodata.str1.1.rodata.str1.4.text.unlikely._ZN12node_sqlite314RegisterModuleEN2v86HandleINS0_6ObjectEEE.rel.text._ZN12node_sqlite314RegisterModuleEN2v86HandleINS0_6ObjectEEE.text.unlikely._Z18sqlite_code_stringi.rel.text._Z18sqlite_code_stringi.rel.rodata._Z18sqlite_code_stringi.text.unlikely._Z24sqlite_authorizer_stringi.rel.text._Z24sqlite_authorizer_stringi.text.unlikely._GLOBAL__sub_I_node_sqlite3.cc.rel.text.startup._GLOBAL__sub_I_node_sqlite3.cc.rel.init_array.bss._ZStL8__ioinit.text.__x86.get_pc_thunk.cx.text.__x86.get_pc_thunk.bx.comment.note.GNU-stack.rel.eh_frame.group   F0? DI NSX]'b1g=lGqLvV|[_cglr{  $$)*20;6A<HBOHZNcTjZp`uf|lrx~viYI=- &( + 0 5 : ? D I N S X ] b g l q v {  x p h ` X P H @ 8 0 *18# "8Ps.[I=t _2] H t    = p      2 H ?f ~   node_sqlite3.cc_GLOBAL__sub_I_node_sqlite3.cc_ZStL8__ioinit.L17.LC0.LC1.LC2.LC3.LC4.LC5.LC6.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC23.LC24.LC25.LC26.LC27.LC28.LC29.LC30.LC31.LC32.LC33.LC34.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC43.LC44.LC45.LC46.LC47.LC48.LC49.LC50.LC51.LC53.LC81.LC80.LC79.LC78.LC77.LC76.LC75.LC74.LC73.LC72.LC71.LC70.LC69.LC68.LC67.LC66.LC65.LC64.LC63.LC62.LC61.LC60.LC59.LC58.LC57.LC56.LC55.LC54.LC82.L48.L20.L21.L22.L23.L24.L25.L26.L27.L28.L29.L30.L31.L32.L33.L34.L35.L36.L37.L38.L39.L40.L41.L42.L43.L44.L45.L46.L47.LC85.LC86.LC87.LC84_ZN12node_sqlite314RegisterModuleEN2v86HandleINS0_6ObjectEEE__x86.get_pc_thunk.bx_GLOBAL_OFFSET_TABLE__ZN2v811HandleScopeC1Ev_ZN2v811HandleScope11GetThreadIdEv_ZN4node7commons21getInstanceByThreadIdEi_ZN12node_sqlite38Database3NewERKN2v89ArgumentsE_ZN2v816FunctionTemplate3NewEPFNS_6HandleINS_5ValueEEERKNS_9ArgumentsEES3_NS1_INS_9SignatureEEE_ZN2v816FunctionTemplate16InstanceTemplateEv_ZN2v814ObjectTemplate21SetInternalFieldCountEi_ZN2v86String9NewSymbolEPKci_ZN2v816FunctionTemplate12SetClassNameENS_6HandleINS_6StringEEE_ZN12node_sqlite38Database5CloseERKN2v89ArgumentsE_ZN2v816FunctionTemplate17PrototypeTemplateEv_ZN2v88Template3SetENS_6HandleINS_6StringEEENS1_INS_4DataEEENS_17PropertyAttributeE_ZN12node_sqlite38Database4ExecERKN2v89ArgumentsE_ZN12node_sqlite38Database4WaitERKN2v89ArgumentsE_ZN12node_sqlite38Database13LoadExtensionERKN2v89ArgumentsE_ZN12node_sqlite38Database9SerializeERKN2v89ArgumentsE_ZN12node_sqlite38Database11ParallelizeERKN2v89ArgumentsE_ZN12node_sqlite38Database9ConfigureERKN2v89ArgumentsE_ZN2v86String3NewEPNS_7IsolateEPKci_ZN12node_sqlite38Database10OpenGetterEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE_ZN2v814ObjectTemplate11SetAccessorENS_6HandleINS_6StringEEEPFNS1_INS_5ValueEEENS_5LocalIS2_EERKNS_12AccessorInfoEEPFvS7_NS6_IS4_EESA_ES5_NS_13AccessControlENS_17PropertyAttributeENS1_INS_17AccessorSignatureEEE_ZN12node_sqlite38Database13jx_persistentE_ZN2v82V818GlobalizeReferenceEPPNS_8internal6ObjectE_ZN2v816FunctionTemplate11GetFunctionEv_ZN2v86Object3SetENS_6HandleINS_5ValueEEES3_NS_17PropertyAttributeE_ZN2v811HandleScopeD1Ev_ZN12node_sqlite39Statement3NewERKN2v89ArgumentsE_ZN12node_sqlite39Statement13jx_persistentE_ZN12node_sqlite39Statement4BindERKN2v89ArgumentsE_ZN12node_sqlite39Statement3GetERKN2v89ArgumentsE_ZN12node_sqlite39Statement3RunERKN2v89ArgumentsE_ZN12node_sqlite39Statement3AllERKN2v89ArgumentsE_ZN12node_sqlite39Statement4EachERKN2v89ArgumentsE_ZN12node_sqlite39Statement5ResetERKN2v89ArgumentsE_ZN12node_sqlite39Statement8FinalizeERKN2v89ArgumentsE_ZN2v87Integer3NewEiPNS_7IsolateE_ZN2v87Isolate10GetCurrentEv_Z18sqlite_code_stringi__x86.get_pc_thunk.cx_Z24sqlite_authorizer_stringi_ZNSt8ios_base4InitC1Ev__dso_handle_ZNSt8ios_base4InitD1Ev__cxa_atexit  !)1OZbk  4 C[ "6 E] $8 G_  &: Ia ! ';[ "*;Wb~ # $":^d % &$<`f '  (& > b h   )     6 A U e *|    +   # ,: ^ h -|  .   /  0 0 D T 1k    2    3) M a q 4    5  / 6Fj~ 7 8(<L 9c : ;!EYi < =' >>bv ? @ 4D A[ B C=Qa Dx E F6Zn~ G H,5 ISw J K5IY Lp  * M2 N: OB PJ QR RZ Sb Tj Ur Vz W X Y Z [ \ ] ^ _ ` a b c d e f g h  i j k l m n o p q r s$ t( u, v0 w4 x8 y< z@ {D |H }L ~P T X \ ` d h l p t x |                                            $ ( , 0 4 8 < @ D H L P T X \ ` d h l p t x |         $ * :   ( 2: T h |4 < D!D'D,2D9;2=J @8@  @(A *& @0B0 JP{P?w @`E0 F @E8  @E ">Z0(c w s @E0 X! ! 8-